【发布时间】:2020-12-22 16:07:12
【问题描述】:
我想通过 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,
CASE WHEN HASHBYTES('SHA2_512', 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 |
【问题讨论】:
-
您确定您正在运行 MySQL 吗?我认为它不支持这样声明表变量。
-
我希望它是 ms-sql,而不是 mysql
-
仅供参考,它是一个案例表达式而不是一个语句。
标签: sql sql-server string case sql-null