Ken*_*her 7 sql-server pattern-matching sql-server-2014 unicode
我正在编写一段对 unicode 字符使用模式匹配的代码,但我遇到了一个奇怪的问题。有些字符有效,有些则无效。
DECLARE @Pattern nvarchar(50) = N'%[^a-z]%' -- Simple pattern
SELECT PatIndex(@Pattern, nchar(46797)), nchar(46797) -- Works
SELECT PatIndex(@Pattern, nchar(14843)), nchar(14843) -- Doesn't Work
Run Code Online (Sandbox Code Playgroud)
该模式应该适用于任何不是 az 的字符,但由于某种原因它没有捕捉到某些字符。有谁知道为什么某些 unicode 字符会匹配而其他字符则不会?
小智 5
看看做一个二进制整理是否符合你的需要。这是一个快速测试。
USE Tempdb
GO
IF OBJECT_ID('PattMatch') IS NOT NULL
BEGIN
DROP TABLE PattMatch
END
GO
CREATE TABLE PattMatch (COL1 NVARCHAR(50))
GO
INSERT INTO PattMatch
VALUES (nchar(46797)),(nchar(14843)),('ddddddd*'),('lettersand9999')
GO
DECLARE @Pattern nvarchar(50) = N'%[^a-z]%'
SELECT PatIndex(@Pattern, COL1 COLLATE Latin1_General_BIN2), COL1 FROM PattMatch
GO
DROP TABLE PattMatch
GO
--your test
DECLARE @Pattern nvarchar(50) = N'%[^a-z]%'
SELECT PatIndex(@Pattern, nchar(46797) COLLATE Latin1_General_BIN2)
SELECT PatIndex(@Pattern, nchar(14843) COLLATE Latin1_General_BIN2)
Run Code Online (Sandbox Code Playgroud)