正则表达式过滤
问题描述:
我在SQL查询中有这样的正则表达式正则表达式过滤
DECLARE @RETURN_VALUE VARCHAR(MAX)
IF @value LIKE '%[0-9]%[^A-Z]%[0-9]%'
BEGIN
SET @RETURN_VALUE = NULL
END
我不知道,但每当我有这个在我行的12个测试然后它给了我12的值,但如果我有三位数字,然后过滤掉三位数字。如何修改正则表达式以返回三位数字。
任何帮助将不胜感激。
答
您可以轻松创建SQL CLR函数并在查询中使用它。 Visual Studio为此提供了一个项目模板,并使部署功能变得简单。
Here is more information从微软有关如何创建功能以及如何使用它(布尔匹配和数据提取)。
答
SQL没有正则表达式:它有SQL通配符表达式。它们比正则表达式简单得多,而且早于正则表达式。举例来说,有没有办法来指定交替(a|b
)或重复(a*
,a+
,a?
,a{m,n}
),比如你可能在正则表达式查找。
在“等表达式”你有
LIKE '%[0-9]%[^A-Z]%[0-9]%'
将匹配含有如下图案字符串
- 零个或更多的任何字符中的任何地方的任何字符串,随后...
- 单个十进制数字,后跟...
- 零个或多个的任何字符,接着...
- 除A –ž其他(无论是大小写敏感或不依赖于所使用的排序序列),然后由一个字符...
- 零或任何字符,接着...
- 单个十进制数字,接着...
- 零个或多个的任何字符
应该注意的是,%
很可能比你想象的要多。
答
首先,注意,这不是一个真正的“正则表达式”,它的通配符匹配的特定SQL形式。用SQL通配符可以完成的任务非常有限。作为一个例子,你不能“任选”匹配特定的字符或字符集。
你的表情,你写它,将匹配包含在它们之间的两个数字与至少一个非字母字符的任意值,这意味着它会匹配:
- 1^1
- 1?7
- 1AAAAAAAAAAA?AAAAAAAAA1
- ----------------------- 5 --------- -------- 3 -------
和无限多的类似结构的物品。
奇怪的是,一个字符串会不匹配这种模式是“12 TEST”,因为在1和2之间没有任何字符的模式也不会“给你” 12回的价值,因为它不是一个解析表达式,只是一个匹配的表达式:它返回1(真)或0(假)。
很明显在应用程序别的事情上,甚至可能是一个实际的正则表达式的东西,但它无关,与你在这里包括了SQL。
SQL什么味道? – driis 2012-03-08 18:09:56
也许你可以举一些你想要匹配什么和你想要什么不匹配的例子。 – 2012-03-08 18:12:18
@driis:看起来像T-SQL给我,但什么版本.... – Sorpigal 2012-03-08 18:14:15