amc*_*ack 207 sql sql-server
如何比较字符串,以便只有在每个字符串的情况相同时才进行比较.例如:
Select * from a_table where attribute = 'k'
Run Code Online (Sandbox Code Playgroud)
...将返回属性为"K"的行.我不想要这种行为.
amc*_*ack 357
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS
Run Code Online (Sandbox Code Playgroud)
诀窍.
小智 46
您还可以使用以下语法将该属性转换为区分大小写:
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)
现在,您的搜索将区分大小写.
如果您想再次使该列不区分大小写,请使用
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)
QMa*_*ter 27
您可以轻松地将列转换为VARBINARY(最大长度),长度必须是您希望避免缺陷比较的最大长度,足以将长度设置为列长度.修剪列帮助您比较实际值,除了空间有意义并在表格列中有价值,这是一个简单的示例,您可以看到我修剪列值然后转换和比较:
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
Run Code Online (Sandbox Code Playgroud)
希望这有帮助.
Dav*_*ton 17
正如另一种选择,您可以使用HASHBYTES,如下所示:
SELECT *
FROM a_table
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')
Run Code Online (Sandbox Code Playgroud)
小智 7
简化一般答案
SQL 区分大小写的字符串比较
这些示例可能会有所帮助:
Declare @S1 varchar(20) = 'SQL'
Declare @S2 varchar(20) = 'sql'
if @S1 = @S2 print 'equal!' else print 'NOT equal!' -- equal (default non-case sensitivity for SQL
if cast(@S1 as binary) = cast(Upper(@S2) as binary) print 'equal!' else print 'NOT equal!' -- equal
if cast(@S1 as binary) = cast(@S2 as binary) print 'equal!' else print 'NOT equal!' -- not equal
if @S1 COLLATE Latin1_General_CS_AS = Upper(@S2) COLLATE Latin1_General_CS_AS print 'equal!' else print 'NOT equal!' -- equal
if @S1 COLLATE Latin1_General_CS_AS = @S2 COLLATE Latin1_General_CS_AS print 'equal!' else print 'NOT equal!' -- not equal
Run Code Online (Sandbox Code Playgroud)
转换可能比哈希字节的运行时计算更有效,我希望整理可能更快。
| 归档时间: |
|
| 查看次数: |
180626 次 |
| 最近记录: |