ms sql 找到 unicode 0
ms sql find unicode 0
在数据库中写入了一个 unicode 0,然后开始查询以查找该值。
示例:
select *,Len(test) as length, Unicode(test) as unicode,DATALENGTH(test) as datalength
from (values (NCHAR(0x0))) as t(test)
where test like N'_'
但没有返回值。为什么?我需要做什么才能起作用?
如果我是正确的,unicode 0 (NCHAR 0x0) 不算作字符,而是 NULL(但不是 SQL NULL 类型)。
通配符 _ 正在搜索替换 1 个字符,这意味着值需要至少有一个字符。删除 _ 会给你想要的结果。
这是 Pattern matching documentation 的预期行为:
0x0000 (char(0)) is an undefined character in Windows collations and
cannot be included in LIKE.
但是请注意,LIKE CHAR(0)
确实有效
DECLARE @Character nchar(1);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE CHAR(0) THEN 1 ELSE 0 END;
或
DECLARE @Character nchar(10);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE '%' + CHAR(0) + '%' THEN 1 ELSE 0 END;
具体来说,文档说使用通配符(例如 '_'
表示 (N)CHAR(0)
将不起作用。
在数据库中写入了一个 unicode 0,然后开始查询以查找该值。 示例:
select *,Len(test) as length, Unicode(test) as unicode,DATALENGTH(test) as datalength
from (values (NCHAR(0x0))) as t(test)
where test like N'_'
但没有返回值。为什么?我需要做什么才能起作用?
如果我是正确的,unicode 0 (NCHAR 0x0) 不算作字符,而是 NULL(但不是 SQL NULL 类型)。 通配符 _ 正在搜索替换 1 个字符,这意味着值需要至少有一个字符。删除 _ 会给你想要的结果。
这是 Pattern matching documentation 的预期行为:
0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in LIKE.
但是请注意,LIKE CHAR(0)
确实有效
DECLARE @Character nchar(1);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE CHAR(0) THEN 1 ELSE 0 END;
或
DECLARE @Character nchar(10);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE '%' + CHAR(0) + '%' THEN 1 ELSE 0 END;
具体来说,文档说使用通配符(例如 '_'
表示 (N)CHAR(0)
将不起作用。