7

我正在尝试对多个值使用 T-SQL LIKE。经过我的研究,最简单的方法似乎类似于:

SELECT Column1 
FROM Table_1
WHERE Column1 LIKE '[A,B,C]%'

所以我可以期待输出看起来像 A1,B2,C3 ......

我的问题是我的场景的元素(A、B、C)的格式是“X/Y/Z”——是的,包含斜线!斜杠将被视为分隔符——与逗号相同。例如,我想选择纽约、东京和伦敦的任何地方,所以我写道:

WHERE Location LIKE '[US/New York, Japan/Tokyo, UK/London]%' 

但它的作用与

WHERE Location LIKE '[US,New York, Japan, Tokyo, UK, London]%'

它将返回美国/洛杉矶/中央商务区或东京/塔......

任何人都可以照亮我如何在 LIKE 子句的方括号内转义斜线吗?提前谢谢了。

这是示例表:

DECLARE @temp TABLE (Location NVARCHAR(50))
INSERT INTO @temp (Location ) VALUES ('US/New York/A')
INSERT INTO @temp (Location ) VALUES('New York/B')
INSERT INTO @temp (Location ) VALUES ('Japan/Tokyo/C')
INSERT INTO @temp (Location ) VALUES ('Tokyo/D')
INSERT INTO @temp (Location ) VALUES ('UK/London/E')
INSERT INTO @temp (Location ) VALUES('London/F')

以下是我的草稿:

SELECT *
FROM @temp
WHERE Location LIKE '[US/New York, Japan/Tokyo, UK/London]%'

我期待的输出是:US/New York/A Japan/Tokyo/C UK/London/E,但实际上它们都将被拉出。

4

4 回答 4

1
DECLARE @temp TABLE ( Location NVARCHAR(50) )

INSERT @temp (Location ) 
VALUES ('US/New York/A') 
    , ('New York/B') 
    , ('Japan/Tokyo/A') 
    , ('Tokyo/B') 
    , ('UK/London/A') 
    , ('London/B')

Select * 
From @temp  
Where Location Like '%/A'

/在这种情况下没有必要逃避。您可以简单地使用带有尾随通配符的表达式。

根据对 OP 的更改进行编辑

看来您可能对如何[]在 LIKE 函数中解释模式有误解。当您有类似 的模式时'[US/New York]%',它表示“查找以以下任何字符U, S, /, N, e, w, (空格), Y, o,r或开头的值k。因此,这样的模式将找到一个值South AfricaOuter Mongolia。它不是' t 寻找整个值等于 的行US/New York

实现您所寻求的一种方法是使用多个Or语句:

Select *
From @temp
Where Location Like 'US/New York%'
    Or Location Like 'Japan/Tokyo%'
    Or Location Like 'UK/London%'
于 2013-05-31T06:31:39.287 回答
0

试试这个——

DECLARE @temp TABLE (name NVARCHAR(50))
INSERT INTO @temp (name)
VALUES ('Ben S'), ('test')

SELECT DISTINCT t.*
FROM @temp t
CROSS JOIN (
    SELECT *
    FROM (VALUES ('A'), ('B'), ('C')) t(t2)
) t2
WHERE t.name LIKE '%' + t2 + '%'

或者试试这个 -

SELECT t.*
FROM @temp t
WHERE EXISTS(
    SELECT 1
    FROM (VALUES ('A'), ('B'), ('C')) c(t2) 
    WHERE t.name LIKE '%' + t2 + '%'
)
于 2013-05-31T04:51:44.190 回答
0
declare @str nvarchar(10);
set @str='X/Y/Z';
SELECT name FROM dbo.Slash WHERE name LIKE @str+'%'

它将检索 X/Y/Z1,X/Y/Z,..

于 2013-05-31T04:53:59.363 回答
0

尝试将路径分隔符与有效字符范围分开。

WHERE name LIKE '%[/][A-Z][/][A-Z]_'

这将匹配像 blabla/A/A1 和 xxx/B/B1 这样的字符串

编辑:括号被视为“允许字符的集合”。根据您改写的问题,我认为您可以通过简单地将一些通配符与一些文字值组合来解决。以下是一些示例:

以斜线 B 结尾:

SELECT *
FROM @temp
WHERE Location LIKE '%/B'

以斜线“任何单个字符”结尾

SELECT *
FROM @temp
WHERE Location LIKE '%/_'

以 Londen 开头——任意数量的字符——以斜杠“任意单个字符”结尾

SELECT *
FROM @temp
WHERE Location LIKE 'London%/_'

-- 在任何地方都有 Londen,以斜线“任何单个字符”结尾

SELECT *
FROM @temp
WHERE Location LIKE '%London%/_'
于 2013-05-31T05:15:00.177 回答