如何查找SQL Server中所有大写字母的值?

问题描述:

如何查找全部大写的列值?像LastName = 'SMITH',而不是'Smith'如何查找SQL Server中所有大写字母的值?

这里是我试图...

SELECT * 
    FROM MyTable 
WHERE FirstName = UPPER(FirstName) 
+1

这应该工作。你得到了什么结果? – Polynomial

+0

@Polynomial,我只是得到相同的结果,如果我运行“WHERE FirstName = FirstName”...也许编码需要不同(如果这是有道理的.. idk我正在谈论什么) – daveomcd

您可以强制区分大小写的排序规则;

select * from T 
    where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS 

缺省情况下,SQL比较是不区分大小写。

你可以尝试使用这个作为你的where子句吗?

WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1 

看一看here

看来你有几种选择

  • 投的字符串VARBINARY(长度)

  • 使用COLLATE指定区分大小写排序

  • 计算th琴弦电子BINARY_CHECKSUM()比较

  • 变化表列的核对属性

  • 使用计算列(VARBINARY的隐式计算)

你需要使用一个服务器排序规则是大小写敏感的,像这样:

SELECT * 
FROM MyTable 
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS 

尝试

SELECT * 
    FROM MyTable 
WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS 

此排序规则允许区分大小写的比较。

如果你想改变你的数据库的排序规则,所以你并不需要在查询中specifiy区分大小写的排序规则,你需要做以下(from MSDN):

1)请确保您有所有的信息或脚本需要重新创建您的用户数据库及其中的所有对象。

2)使用诸如bcp Utility之类的工具导出所有数据。

3)删除所有的用户数据库。

4)在setup命令的SQLCOLLATION属性中重建指定新归类的主数据库。例如:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
/SQLCOLLATION=CollationName 

5)创建所有数据库及其中的所有对象。

6)导入您的所有数据。

尝试这个

SELECT * 
FROM MyTable 
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS 

找到很好的例子,我创建了一个简单的UDF

create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit 

    as 

begin 

    if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS)) 
     return 1; 

    return 0; 
end 

然后你就可以轻松地使用它在任何列WHERE条款。

要使用OP例如:

SELECT * 
FROM MyTable 
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1