NULL 타입이 있습니까?


답변:


8

신탁:

null문자는 형식을 가지고 있지만하지 않습니다

  1. null 어떤 유형으로도 캐스팅 할 수 있으며

    • 오버로드 된 프로 시저 또는 함수 호출
    • decode함수 의 리턴 타입 제어

      select decode('A','B',to_char(null),'A','1') from dual;
      DECODE('A','B',TO_CHAR(NULL),'A','1')
      -------------------------------------
      1
      
      select decode('A','B',to_number(null),'A','1') from dual;
      DECODE('A','B',TO_NUMBER(NULL),'A','1')
      --------------------------------------- 
                                            1
    • union첫 번째 쿼리 블록이 다음을 포함 할 때 와 같이 집합 연산자의 열 유형 제어null
  2. null데이터베이스에 저장된 값은 항상 유형이 있습니다.

    create table t(n integer, s varchar(10));
    insert into t values(null, null);
    
    select decode('A','B',n,'A','1') from t; 
    DECODE('A','B',N,'A','1')
    -------------------------
                            1
    
    select decode('A','B',s,'A','1') from t;
    DECODE('A','B',S,'A','1')
    -------------------------
    1

2
+1 호기심을 위해 시도합시다. DUAL에서 NULL what_type_is_this를 선택하십시오. 물론 이것은 실용적인 유용한 예가 아니며 아직 시도하지 않았으므로 그러한 경우 캐스트를 사용하는 법을 배웠습니다.
bernd_k

6

SQL Server, int

SELECT NULL AS foo INTO dbo.bar
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'bar'
DROP TABLE dbo.bar

MySQL, 이진 (0)

CREATE TABLE mydb.foo (select NULL AS bar);
EXPLAIN mydb.foo;
DROP TABLE mydb.foo;

한 매우 흥미로운 것을 - 나는 그것이 오라클에하는 것처럼 그 오류를 슬로우 가정
잭은 말한다 topanswers.xyz 시도

4
재미있는 발견. 그러나 이것은 DB 엔진이 테이블을 생성 할 때 데이터 유형으로 기본 설정되어 있음을 보여줍니다. 반드시 엔진에 NULL 유형이있는 것은 아닙니다. 예를 들어이 오류 는 SQL Server가 실제로 NULL을 형식화되지 않은 것으로 취급 함을 나타냅니다.
Nick Chammas

2
@Nick select isnumeric(null)= 0 ... 흥미로운
팩터 미스틱

5

오라클은 어떤 의미에서는 문자열 유형입니다.

그것이 ADO Reader가 알려주는 것입니다. Powershell 스크립트는 다음과 같습니다.

[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient") 
$ConnectionString = "Data Source=myTNS;User ID=myUSER;Password=myPassword" 
$conn=new-object System.Data.OracleClient.OracleConnection 
$conn.ConnectionString=$ConnectionString 
$conn.Open() 
$sql = "Select NULL xx from DUAL"
$cmd=new-object System.Data.OracleClient.OracleCommand($sql,$conn)

$r = $cmd.ExecuteReader()

$r.GetSchemaTable() | % { $_
}        

그게

ColumnName               : XX
ColumnOrdinal            : 0
ColumnSize               : 0
NumericPrecision         : 0
NumericScale             : 0
DataType                 : System.String
ProviderType             : 22
IsLong                   : False
AllowDBNull              : True
IsAliased                : 
IsExpression             : 
IsKey                    : 
IsUnique                 : 
BaseSchemaName           : 
BaseTableName            : 
BaseColumnName           : 
ProviderSpecificDataType : System.Data.OracleClient.OracleString

라인에 주목

ProviderSpecificDataType : System.Data.OracleClient.OracleString


3

postgres :

create table foo as select null as bar;
WARNING:  column "bar" has type "unknown"
DETAIL:  Proceeding with relation creation anyway.

postgres=> \d foo

 Column |  Type   | Modifiers
--------+---------+-----------
 bar    | unknown |
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.