0

以下仅返回一个字符长的姓氏。
我可以添加一个进一步的条件,以便它只返回拉丁字母字符,即 AZ(加 az)

SELECT Surname
FROM WHData.dbo.vw_DimUser
WHERE 
    LEN(Surname) =1
    AND <extra condition required>
GROUP BY Surname
4

1 回答 1

0
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

在此处输入图像描述

您可以看到两者Aa仅在[a-Z]用作匹配模式时才正确匹配。

以 SQL 小提琴为例

这可以在上一个 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,所以实际上是在任何特定环境中进行测试的情况,其中部署了类似的东西。

于 2013-01-28T17:13:58.250 回答