区分大小写的LIKE-多针+干草堆比较

问题描述 投票:0回答:1

我有一个条件,即使用区分大小写的排序规则将多列与多针进行 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%')

...实际情况包含更多的针,整个事情写起来变得乏味。有没有一种创造性的方法来节省语法?具体来说,不必重复整理顺序?

sql-server t-sql
1个回答
0
投票

您可以使用 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 中的大小写敏感有所怀疑,你确定你真的需要它吗?

© www.soinside.com 2019 - 2024. All rights reserved.