sql - 如何使用 Regex 查询 ISSN 格式模式?

标签 sql regex t-sql

结合使用 Regex 和 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

但它回来时是空的。

如果我尝试这个:

WHERE [ISSN] not LIKE '%\^d{4}-\d{3}(\d|x|X)%'

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

最佳答案

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

关于sql - 如何使用 Regex 查询 ISSN 格式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262142/

相关文章:

python - 记录正则表达式匹配问题

sql - 关于建立库存数据库的问题

mysql - 从寄存器中选择最大和最小日期

regex - 处理单个和多个单词字符串

正则表达式匹配分数

sql - 在 SQL Server 中,如何选择共享公共(public)列值的行?

t-sql - SQL 按时间间隔对数据进行分组

mysql - 如何在mysql中获取自月份开始以来的累计计数

mysql - SQL:根据两个给定值精确选择具有匹配 ID 的两行

sql - 获取日期时间范围之间的类可用时间