2

将正则表达式与 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] 不喜欢 '%\^d{4}-\d{3}(\d|x|X)%'

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

4

2 回答 2

2

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

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

于 2013-08-15T21:44:59.950 回答
0

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
于 2013-08-15T21:55:08.790 回答