以下仅返回一个字符长的姓氏。
我可以添加一个进一步的条件,以便它只返回拉丁字母字符,即 AZ(加 az)
SELECT Surname
FROM WHData.dbo.vw_DimUser
WHERE
LEN(Surname) =1
AND <extra condition required>
GROUP BY Surname
以下仅返回一个字符长的姓氏。
我可以添加一个进一步的条件,以便它只返回拉丁字母字符,即 AZ(加 az)
SELECT Surname
FROM WHData.dbo.vw_DimUser
WHERE
LEN(Surname) =1
AND <extra condition required>
GROUP BY Surname
SELECT Surname
FROM WHData.dbo.vw_DimUser
WHERE
LEN(Surname) = 1
AND Surname like '[a-Z]'
GROUP BY Surname
在下面的评论后编辑:
让我们测试一下:
create table t1 (c1 char(1) collate Latin1_General_CS_AS
, c2 char(1) collate Latin1_General_CS_AS
, wild1 varchar(10) collate Latin1_General_CS_AS
, wild2 varchar(10) collate Latin1_General_CS_AS)
insert into t1 values ('A', 'a', '[A-z]', '[a-Z]')
select match1 = case when c1 like wild1 then 'Matched' else 'Unmatched' end
, match2 = case when c1 like wild2 then 'Matched' else 'Unmatched' end
, match3 = case when c2 like wild1 then 'Matched' else 'Unmatched' end
, match4 = case when c2 like wild2 then 'Matched' else 'Unmatched' end
from t1
您可以看到两者A
和a
仅在[a-Z]
用作匹配模式时才正确匹配。
这可以在上一个 SO question 的答案中得到解释。基本上,使用Latin1_General_CS_AS
,SQL Server 将对字符进行排序,例如:
a
A
b
B
然而,为了再次窃取这个问题,Books Online 指出:
In range searches, the characters included in the range may vary depending on the sorting rules of the collation.
所以我想它在某种程度上依赖于 COLLATION,所以实际上是在任何特定环境中进行测试的情况,其中部署了类似的东西。