【问题标题】:How to query using Regex for the ISSN format pattern?如何使用 Regex 查询 ISSN 格式模式?
【发布时间】:2013-08-16 05:55:08
【问题描述】:

将正则表达式与 T-SQL 结合使用,尝试获取将选择与 ISSN 模式匹配的记录的查询:http://en.wikipedia.org/wiki/International_Standard_Serial_Number

即 4 位数字、一个破折号和 4 位数字或 3 位数字和一个字母 X,例如:

1234-5678 或者 1234-567X

X 可以是小写。

我试过了:

"\d{4}-\d{3}(\d|x|X)"

SELECT [KBID],  [ISSN]
FROM [ISSNTable] 
WHERE  [ISSN] LIKE '%\d{4}\-\d{3}(\d|x|X)%'
order by ISSN desc

但它回来是空的。

如果我试试这个:

在哪里 [ISSN] 不喜欢 '%\^d{4}-\d{3}(\d|x|X)%'

它返回表中的所有内容,甚至是格式错误的数据。

【问题讨论】:

    标签: sql regex tsql


    【解决方案1】:

    T-SQL LIKE 是模式匹配器,但不是正则表达式模式匹配器。

    DECLARE @issn varchar(9)
    set @issn = '1234-567X'
    SELECT 
    CASE WHEN @issn LIKE '[0-9][0-9][0-9][0-9][-][0-9][0-9][0-9][X0-9]'
        THEN 1 
        ELSE 0 
    END AS isValidISSN
    

    http://msdn.microsoft.com/en-us/library/ms179859.aspx

    【讨论】:

    • 太棒了!谢谢兄弟!
    【解决方案2】:

    Tsql 仅支持字符类的基本正则表达式 - 不支持重复表达式 {n} 或像 \d 这样的快捷方式。

    试试这个:

    SELECT [KBID], [ISSN]
    FROM [ISSNTable] 
    WHERE [ISSN] LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9xX]%'
    order by ISSN desc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多