我有一个条件,即使用区分大小写的排序规则将多列与多针进行 LIKE 比较:
SELECT *
FROM foobar
WHERE (foo.col1 COLLATE SQL_Latin1_General_CP1_CS_AS LIKE '%needle1%'
OR foo.col2 COLLATE SQL_Latin1_General_CP1_CS_AS LIKE '%needle1%'
OR foo.col2 COLLATE SQL_Latin1_General_CP1_CS_AS LIKE 'needle2%'
OR foo.col3 COLLATE SQL_Latin1_General_CP1_CS_AS LIKE '%nee%dle3%')
...实际情况包含更多的针,整个事情写起来变得乏味。有没有一种创造性的方法来节省语法?具体来说,不必重复整理顺序?
您可以使用 CROSS APPLY 创建列的区分大小写的版本,例如:
SELECT *
FROM (
SELECT 'abra' AS test
, 'cadabra' AS test2
) x
CROSS APPLY (
SELECT test COLLATE SQL_Latin1_General_CP1_CS_AS AS testCS
, test2 COLLATE SQL_Latin1_General_CP1_CS_AS AS test2CS
) y
WHERE testCS LIKE '%A%'
OR test2CS LIKE '%A%'
仅当您多次引用同一列时,这才可以节省打字时间。否则可能没什么可做的。
我总是对 sql 中的大小写敏感有所怀疑,你确定你真的需要它吗?