[英]SQL Server 2008: How to select all rows where field has all capital letters?
这就是我的想法,我知道在这个领域,第一个单词总是至少有 2 个字符长。
Select *
From Table!
where SUBSTRING(Name, 1, 3) like '[A-Z]'
但是,这是带回非大写字母的任何想法吗?
Select ...
From MyTable
Where Name Not Like '%[^A-Z]%' Collate SQL_Latin1_General_CP1_CS_AS
需要注意的是,这也将排除 AZ 之外的数字和字符。 如果您想包含非拉丁大写字符,您确实需要使用Upper
function 和Collate
e 谓词:
Select ...
From MyTable
Where Name = Upper(Name) Collate SQL_Latin1_General_CP1_CS_AS
测试脚本:
With TestData As
(
Select '012324' As Name
Union All Select 'ABC'
Union All Select 'abc'
Union All Select 'aBc'
Union All Select 'ABé'
Union All Select 'ABÉ'
)
Select *
From TestData
Where Name = UPPER(Name) Collate SQL_Latin1_General_CP1_CS_AS
结果:
012324
ABC
ABÉ
CREATE TABLE #table1
(
x VARCHAR(32)
);
INSERT #table1 SELECT '123aaa';
INSERT #table1 SELECT 'foo';
INSERT #table1 SELECT 'BaR';
INSERT #table1 SELECT 'saM';
INSERT #table1 SELECT 'Sam';
INSERT #table1 SELECT 'SaM';
INSERT #table1 SELECT 'SAM';
SELECT * FROM #table1
WHERE CONVERT(VARBINARY(32), x) = CONVERT(VARBINARY(32), UPPER(x))
DROP TABLE #table1;
Output:
x
SAM
如何针对原始版本测试大写版本:
SELECT * FROM Table WHERE UPPER(Name) = Name
编辑:正如评论中指出的那样,如果排序规则不区分大小写(我认为默认情况下),这将不起作用。 查看托马斯的答案。
你能做类似的事情吗
select * from Table!
where Name = upper(Name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.