正则表达式过滤器

时间:2012-03-08 18:06:42

标签: sql sql-server wildcard

我的sql查询中有这个正则表达式

DECLARE @RETURN_VALUE VARCHAR(MAX)  
IF @value LIKE '%[0-9]%[^A-Z]%[0-9]%'
BEGIN
    SET @RETURN_VALUE = NULL
END

我不确定,但每当我在第12行测试时,它会给我12的值,但如果我有三位数,那么它会过滤掉三位数字。如何修改正则表达式还给我三位数字。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

SQL没有正则表达式:它有 SQL通配符表达式。它们比正则表达式简单得多,并且早于正则表达式。例如,无法指定替换(a|b)或重复(a*a+a?a{m,n}),例如您可能会在正则表达式。

你有“喜欢的表达”

LIKE '%[0-9]%[^A-Z]%[0-9]%'

将匹配字符串

中包含以下格式的任何字符串
  • 任何字符中的零个或多个,后跟...
  • 一个十进制数字,后跟......
  • 任何字符中的零个或多个,后跟...
  • A-Z以外的单个字符(不论是否区分大小写取决于使用的整理顺序),然​​后是......
  • 零或任何字符,后跟...
  • 一个十进制数字,后跟......
  • 任何字符
  • 中的零个或多个

应该注意%可能比您想要的更匹配。

答案 1 :(得分:0)

你试过吗([0-9] *)。我相信这将为您捕获每一个数字。但是,我在正则表达方面并不那么强大。当我通过rubular运行它时,虽然它有用但是BTW,rubular是测试正则表达式的好方法

答案 2 :(得分:0)

您可以轻松创建SQL CLR函数并在查询中使用它。 Visual Studio有一个项目模板,可以快速部署这些功能。

来自Microsoft的

Here is more information关于如何创建函数以及如何使用它(用于布尔匹配和数据提取)。

答案 3 :(得分:0)

首先,请注意,这不是一个“正则表达式”,它是一种特定于SQL的通配符匹配形式。使用SQL通配符可以完成的任务非常有限。例如,您不能“选择性地”匹配特定字符或字符集。

你的表达,正如你所写的那样,将匹配任何包含两位数的值,它们之间至少有一个非字母字符,这意味着它将匹配:

  • 111
  • 1 ^ 1
  • 1?7
  • 1AAAAAAAAAAA?AAAAAAAAA1
  • ----------------------- 5 ----------------- ----- 3 -

无限多的类似结构的物品。

奇怪的是,匹配此模式的一个字符串是“12 TEST”,因为1和2之间没有字符。该模式也不会“给你”12的值因为它不是解析表达式,只是一个匹配的表达式:它返回1(真)或0(假)。

您的应用程序中显然还有其他内容,甚至可能是实际的正则表达式,但它与您在此处包含的SQL无关。