sql-server - 像 '%[9-15]%'(SQL 服务器)

标签 sql-server database sql-like

我正在使用 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/

相关文章:

sql - 在其中一个连接上选择具有最大值的记录

sql-server - 内部联接并将多个表分组为一行

java - Java 的高性能键值存储

sql - 为什么 like-operator 这么快

php - 反向 LIKE 函数查找搜索词的子字符串

sql - SQL Server 如何判断输入日期的格式?

sql-server - 将 with cte 查询的结果插入临时表

database - 将现有数据库克隆到新数据库

javascript - NodeJs 为每个循环并行运行

带有特殊字符'的类似mysql的查询