我试图在一个表达式上使用一些正则表达式,我对WHERE
子句有两个条件。我要捕获的模式是106后跟任何数字后跟一个必须是3或4的数字,即106[0-9][3-4]
首先,我试过这个:
SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID REGEXP '106[0-9][3-4]')
这会产生如下错误,最好知道原因。
Msg 102, Level 15, State 1, Line 16
Incorrect syntax near 'REGEXP'.
接下来,我试过这个,现在正在运行,但我不确定这是否正在按照我的意愿行事。
SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND (ForestID LIKE '106[0-9][3-4]')
这样做会如上所述吗?
答案 0 :(得分:2)
您无需与托管代码进行交互,因为您可以使用LIKE:
SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ForestID LIKE '106[0-9][3-4]')
要明确:SQL Server不支持没有托管代码的正则表达式。根据情况,LIKE运算符可以是一个选项,但它缺乏正则表达式提供的灵活性。
如果您希望获得完整的正则表达式功能,请尝试this。
答案 1 :(得分:2)
评论太长了。你指定这个:
我要捕获的模式是106,后跟任何数字 一个必须是3或4的数字,即106 [0-9] [3-4]
然后你用一个正则表达式给出一个例子
WHERE ForestID REGEXP '106[0-9][3-4]'
正则表达式匹配字符串内任何位置的模式。因此,这将匹配'10603'
。它也会匹配'abc10694 def'
。对于正则表达式而言,这是正确的,而不仅仅是一个数据库的实现。
如果这是您想要的行为,那么相应的LIKE
(在SQL Server中)`是:
WHERE ForestID LIKE '%106[0-9][3-4]%'
如果您只想要5位数值,则相应的正则表达式为:
WHERE ForestID REGEXP '^106[0-9][3-4]$'
答案 2 :(得分:0)
尝试下面
SELECT DISTINCT Loggers
FROM [alo].[Forests] C
WHERE (R.LogSU = 3)
AND ((ForestID LIKE '%106_3%' OR ForestID LIKE '%106_4%'))