SQL服务器过滤CJK标点字符
SQL server filtering CJK punctuation characters
我在 sql server 2012 数据库中有几个字符串有 CJK space(大于 space)
Unicode 十进制:12288
十六进制:3000
我想编写一个 SQL 查询来使用 WHERE 子句过滤它们。有什么指点吗?
谢谢,
拉杰什
您可以使用 NCHAR()
函数创建 Unicode 字符:
SELECT NCHAR(0x3000); -- http://unicode-table.com/en/3000/
您还可以在 WHERE
子句中使用它,如下所示,包括将它与 REPLACE()
函数一起使用以摆脱它们。您只需要指定一个二进制排序规则(一个以 _BIN2
结尾)以确保您不会替换任何其他转换为 space 的字符(尽管我不确定这样做的最终效果是否会在不使用二进制排序规则时会有任何不同,至少在这种情况下是这样。
SELECT *
FROM [Table]
WHERE [Column] LIKE N'%' + NCHAR(0x3000) + N'%' COLLATE Latin1_General_100_BIN2;
UPDATE tbl
SET tbl.Column = REPLACE(tbl.[Column] COLLATE Latin1_General_100_BIN2,
NCHAR(0x3000),
N' ')
FROM [Table] tbl
WHERE [Column] LIKE N'%' + NCHAR(0x3000) + N'%' COLLATE Latin1_General_100_BIN2;
我在 sql server 2012 数据库中有几个字符串有 CJK space(大于 space)
Unicode 十进制:12288
十六进制:3000
我想编写一个 SQL 查询来使用 WHERE 子句过滤它们。有什么指点吗?
谢谢, 拉杰什
您可以使用 NCHAR()
函数创建 Unicode 字符:
SELECT NCHAR(0x3000); -- http://unicode-table.com/en/3000/
您还可以在 WHERE
子句中使用它,如下所示,包括将它与 REPLACE()
函数一起使用以摆脱它们。您只需要指定一个二进制排序规则(一个以 _BIN2
结尾)以确保您不会替换任何其他转换为 space 的字符(尽管我不确定这样做的最终效果是否会在不使用二进制排序规则时会有任何不同,至少在这种情况下是这样。
SELECT *
FROM [Table]
WHERE [Column] LIKE N'%' + NCHAR(0x3000) + N'%' COLLATE Latin1_General_100_BIN2;
UPDATE tbl
SET tbl.Column = REPLACE(tbl.[Column] COLLATE Latin1_General_100_BIN2,
NCHAR(0x3000),
N' ')
FROM [Table] tbl
WHERE [Column] LIKE N'%' + NCHAR(0x3000) + N'%' COLLATE Latin1_General_100_BIN2;