我正在使用 SQL Server 2017,我想问一下是否可以使用 LIKE
like 运算符,如下所示:
LIKE '%Ticket [8-14]%'
这是正确的还是大于 9 的数字(10,11 等)将被识别为 1 和 0、1 和 1、1 和 2 等。
如果这种方式不起作用,我该怎么做才能选择包含“Ticket 10”、“Ticket11”等字符串的所有数据?
谢谢你的时间
最佳答案
据我所知,没有。但是,您可以执行以下操作:
WITH Demo AS
(
SELECT * FROM (VALUES
('Ticket 1'),
('Ticket 7'),
('Ticket 8'),
('Ticket 10'),
('Ticket 12'),
('Ticket 15')
) T(X)
)
SELECT *
FROM Demo
WHERE X LIKE '%Ticket [8-9]%' OR X LIKE '%Ticket 1[0-4]%'
此外,请考虑规范化 - 如果您需要查询此值,请创建 TicketNumber
列。连接 Ticket
和数字比解析字符串要容易得多。如果需要,TicketNumber
也可以轻松编入索引。
解析数字还有一个更聪明的想法:
WITH Demo AS
(
SELECT * FROM (VALUES
('Ticket 1'),
('Ticket 7'),
('My Ticket 8A'),
('Ticket 10'),
('Some Ticket 12'),
('Ticket 15 other text'),
('Ticket 135 and more')
) T(X)
)
SELECT *, CAST(CASE WHEN PATINDEX('%Ticket [0-9][0-9][0-9]%',X)!=0 THEN SUBSTRING(X, PATINDEX('%Ticket [0-9][0-9][0-9]%',X)+7, 3)
WHEN PATINDEX('%Ticket [0-9][0-9]%',X)!=0 THEN SUBSTRING(X, PATINDEX('%Ticket [0-9][0-9]%',X)+7, 2)
WHEN PATINDEX('%Ticket [0-9]%',X)!=0 THEN SUBSTRING(X, PATINDEX('%Ticket [0-9]%',X)+7, 1)
END AS int) Number
FROM Demo
列号现在应该包含简单的 int 值 - 准备好进行比较和参与计算。
关于sql-server - 像 '%[9-15]%'(SQL 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52222871/