如何解决SQL 区分大小写的比较
我喜欢用 CASE 语句知道两个字段是否相同。
我设法通过以下查询做到了,但我想知道是否有更好的方法? 我只希望 '=' 进行区分大小写的比较。我尝试使用 COLLATE 但后来我需要使用一个 WHERE 子句来过滤我的结果,我想要所有的行。使用 HASHBYTES 似乎有点矫枉过正,尤其是当我需要将它与 ISNULL 结合使用时
DECLARE @myTable AS TABLE (old varchar(255),new varchar(255));
INSERT INTO @myTable VALUES
('test','test'),('test','TEST'),(null,null)
SELECT old,new,CASE WHEN HASHBYTES('SHA2_512',old) = HASHBYTES('SHA2_512',new) THEN 'same' ELSE 'changed' END AS updated,ISNULL(old,'')) = HASHBYTES('SHA2_512',ISNULL(new,'')) THEN 'same' ELSE 'changed' END AS updated_isnull
FROM @myTable
--where old = new COLLATE Latin1_General_CS_AS
我需要列“updated_isnull”
| old | new | updated | updated_isnull |
| ---- | ---- | ------- | -------------- |
| test | test | same | same |
| test | TEST | changed | changed |
| NULL | NULL | changed | same |
解决方法
正确的解决方案是修复您的列,以便您的数据存储在区分大小写的排序规则中。然后你会这样做:
select old,new,case when old = new
or (old is null and new is null)
then 1
else 0
end as is_same
from @mytable
使用不区分大小写的排序规则,我们可以像这样解决
select old,case when old collate Latin1_General_Bin = new collate Latin1_General_Bin
or (old is null and new is null)
then 1
else 0
end as is_same
from @mytable
old | new | is_same :--- | :--- | ------: test | test | 1 test | TEST | 0 null | null | 1,
试试这个:
{
"_id": ObjectId("5ee3e2deee404124a8ba4382"),"geoJSON": {
"type": "Feature","geometry": {
"type": "LineString","coordinates": [
[
-85.5,31.0
],[
-85.6,31.0
]
]
}
}
}
{
"_id": ObjectId("5ee3e2deee404124a8ba4383"),"coordinates": [
[
-85.55,31.5
],31.5
]
]
}
}
}
{
"_id": ObjectId("5ee3e2deee404124a8ba4384"),32.0
],32.0
]
]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。