正则表达式过滤

问题描述:

我在SQL查询中有这样的正则表达式正则表达式过滤

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

我不知道,但每当我有这个在我行的12个测试然后它给了我12的值,但如果我有三位数字,然后过滤掉三位数字。如何修改正则表达式以返回三位数字。

任何帮助将不胜感激。

+2

SQL什么味道? – driis 2012-03-08 18:09:56

+1

也许你可以举一些你想要匹配什么和你想要什么不匹配的例子。 – 2012-03-08 18:12:18

+0

@driis:看起来像T-SQL给我,但什么版本.... – Sorpigal 2012-03-08 18:14:15

你试过了吗([0-9] *)。我相信这会抓住你的每一个数字。然而,我在正则表达式方面并没有那么强大。当我通过rubular运行时,它工作,虽然:) BTW,rubular是测试正则表达式的好方法

+0

OP的查询不使用正则表达式(尽管他们将其描述为这样) – danio 2017-07-07 09:30:19

您可以轻松创建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。