[SQL] SQL에서 널 문자 리터럴은 무엇인가?
SQLSQL에서 널 문자 리터럴은 무엇인가?
내가 널 문자에 대한 문자 (예를 들어 '\ 0') SQL에 무엇인지 궁금.
참고 :이 아닌 NULL 필드 값,하지만 널 문자 (링크 참조).
나는 전형적인의 혼합 및 null 문자로 열을 가지고있다. 나는 다른 값으로 널 (null) 문자를 대체하기 위해 노력하고있어. 나는 다음과 같은 작업 것이라고 생각하지만 unsuccessfull입니다 것입니다 :
select REPLACE(field_with_nullchar, char(0), ',') from FOO where BAR = 20
해결법
-
==============================
1.두 개의 서로 다른 행동은 케이드 루의 대답에 있습니다 교체 (윈도우 정렬을 사용하는) (SQL 데이터 정렬을 사용하는 경우) 성공 및 실패입니다. 그 이유는 사용 된 정렬의 유형입니다.
두 개의 서로 다른 행동은 케이드 루의 대답에 있습니다 교체 (윈도우 정렬을 사용하는) (SQL 데이터 정렬을 사용하는 경우) 성공 및 실패입니다. 그 이유는 사용 된 정렬의 유형입니다.
이 동작은 거의 3 년 전 마이크로 소프트에 제출했다 :
하지만 불행히도, 그것은 아직 문서화되지 않은.
그래서, (예를 들어 SQL_Latin1_General_CP1_CI_AS 데이터 잘 사용할 수있다) 유일한 해결책은 SQL 데이터 정렬로 변경 데이터 정렬로 보인다.
* 내가 필요로 내 이전 대답을 제거
-
==============================
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.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.난 그냥 내 서버 (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.당신은 그들이 널 (null) 문자입니다 특정 있습니까? 어떻게 그들에 거기에 도착 했습니까?
당신은 그들이 널 (null) 문자입니다 특정 있습니까? 어떻게 그들에 거기에 도착 했습니까?
SQL 서버는 문자열 터미네이터로 취급 것 같습니다. 이 쿼리 :
select 'aaa' + char(0) + 'bbb'
반환 (SQL Server 2008에서) 나를 위해 AAA.
편집 : 위 잘못 - 그것은 취급 그들이 그런 식으로 바로 결과 격자입니다. 그들은 텍스트 모드에 표시됩니다.
-
==============================
6.나를 위해 그것을 해결 같은 문제가 발생하고 NULLIF를 사용했다.
나를 위해 그것을 해결 같은 문제가 발생하고 NULLIF를 사용했다.
Select nullif(field_with_nullchar,'') from FOO where BAR = 20
from https://stackoverflow.com/questions/2828333/what-is-the-null-character-literal-in-tsql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리 결과에서 열 이름으로 열 값을 설정 (0) | 2020.04.20 |
---|---|
[SQL] SQL 서버에서 문자열을 분할 (0) | 2020.04.20 |
[SQL] 어떻게 MySQL의에서 SUM () BY ORDER에? (0) | 2020.04.20 |
[SQL] 파라미터하는 SqlCommand SQL 주입에 내 프로그램의 면역을 사용합니까? (0) | 2020.04.20 |
[SQL] 날짜에 일을 추가 MYSQL (0) | 2020.04.20 |