복붙노트

[SQL] SQL에서 널 문자 리터럴은 무엇인가?

SQL

SQL에서 널 문자 리터럴은 무엇인가?

내가 널 문자에 대한 문자 (예를 들어 '\ 0') SQL에 무엇인지 궁금.

참고 :이 아닌 NULL 필드 값,하지만 널 문자 (링크 참조).

나는 전형적인의 혼합 및 null 문자로 열을 가지고있다. 나는 다른 값으로 널 (null) 문자를 대체하기 위해 노력하고있어. 나는 다음과 같은 작업 것이라고 생각하지만 unsuccessfull입니다 것입니다 :

select REPLACE(field_with_nullchar, char(0), ',') from FOO where BAR = 20

해결법

  1. ==============================

    1.두 개의 서로 다른 행동은 케이드 루의 대답에 있습니다 교체 (윈도우 정렬을 사용하는) (SQL 데이터 정렬을 사용하는 경우) 성공 및 실패입니다. 그 이유는 사용 된 정렬의 유형입니다.

    두 개의 서로 다른 행동은 케이드 루의 대답에 있습니다 교체 (윈도우 정렬을 사용하는) (SQL 데이터 정렬을 사용하는 경우) 성공 및 실패입니다. 그 이유는 사용 된 정렬의 유형입니다.

    이 동작은 거의 3 년 전 마이크로 소프트에 제출했다 :

    하지만 불행히도, 그것은 아직 문서화되지 않은.

    그래서, (예를 들어 SQL_Latin1_General_CP1_CI_AS 데이터 잘 사용할 수있다) 유일한 해결책은 SQL 데이터 정렬로 변경 데이터 정렬로 보인다.

    * 내가 필요로 내 이전 대답을 제거

  2. ==============================

    2.는 C 스타일의 터미네이터 같은 외모뿐만 아니라 SQL의 종결입니다 :

    는 C 스타일의 터미네이터 같은 외모뿐만 아니라 SQL의 종결입니다 :

    SELECT  REPLACE(bad, CHAR(0), ' ')
    FROM    (
             SELECT 'a' + CHAR(0) + 'b' AS bad
            ) AS X
    

    외모는 또한 COLLATION에 의존처럼 :

    SELECT  REPLACE(CAST(bad COLLATE SQL_Latin1_General_CP1_CI_AS AS varchar(10)), CHAR(0), ' ')
    FROM    (
             SELECT 'a' + CHAR(0) + 'b' AS bad
            ) AS X
    

    에 비해, 예상대로 작동합니다 :

    SELECT  REPLACE(CAST(bad COLLATE Latin1_General_CI_AS AS varchar(10)), CHAR(0), ' ')
    FROM    (
             SELECT 'a' + CHAR(0) + 'b' AS bad
            ) AS X
    
  3. ==============================

    3.VARBINARY 캐스트는 정렬 작업을해야한다

    VARBINARY 캐스트는 정렬 작업을해야한다

    SELECT 
       REPLACE(CAST(CAST(fld AS VARCHAR(5)) AS VARBINARY(5)), 0x0, ',')
    FROM 
       (SELECT 'QQ' + CHAR(0) + 'WW' COLLATE Latin1_General_CI_AS AS fld) AS T
    
    SELECT 
       REPLACE(CAST(CAST(fld AS VARCHAR(5)) AS VARBINARY(5)), 0x0, ',')
    FROM 
       (SELECT 'QQ' + CHAR(0) + 'WW' COLLATE SQL_Latin1_General_CP1_CI_AS AS fld) AS T 
    
    >>QQ,WW
    >>QQ,WW
    
  4. ==============================

    4.난 그냥 내 서버 (2008)에 아래의 테스트를 실행과 성공. 그것은 ANSI 설정으로 할 수 있습니다. 나는 여기에 몇 가지 설정을 뒤집기 시도하고 나는 당신의 문제를 재현 할 수 있는지 확인할 수 있습니다.

    난 그냥 내 서버 (2008)에 아래의 테스트를 실행과 성공. 그것은 ANSI 설정으로 할 수 있습니다. 나는 여기에 몇 가지 설정을 뒤집기 시도하고 나는 당신의 문제를 재현 할 수 있는지 확인할 수 있습니다.

    DECLARE @test_null_char VARCHAR(20)
    
    SET @test_null_char = 'aaa' + CHAR(0) + 'bbb'
    
    SELECT @test_null_char    -- Returns "aaa bbb"
    
    SET @test_null_char = REPLACE(@test_null_char, CHAR(0), 'ccc')
    
    SELECT @test_null_char    -- Returns "aaacccbbb"
    
  5. ==============================

    5.당신은 그들이 널 (null) 문자입니다 특정 있습니까? 어떻게 그들에 거기에 도착 했습니까?

    당신은 그들이 널 (null) 문자입니다 특정 있습니까? 어떻게 그들에 거기에 도착 했습니까?

    SQL 서버는 문자열 터미네이터로 취급 것 같습니다. 이 쿼리 :

    select 'aaa' + char(0) + 'bbb'
    

    반환 (SQL Server 2008에서) 나를 위해 AAA.

    편집 : 위 잘못 - 그것은 취급 그들이 그런 식으로 바로 결과 격자입니다. 그들은 텍스트 모드에 표시됩니다.

  6. ==============================

    6.나를 위해 그것을 해결 같은 문제가 발생하고 NULLIF를 사용했다.

    나를 위해 그것을 해결 같은 문제가 발생하고 NULLIF를 사용했다.

    Select nullif(field_with_nullchar,'') from FOO where BAR = 20
    
  7. from https://stackoverflow.com/questions/2828333/what-is-the-null-character-literal-in-tsql by cc-by-sa and MIT license