Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL模式匹配[1-999]之间的所有数字_Sql_Sql Server_Sql Server 2008 R2_Pattern Matching - Fatal编程技术网

MSSQL模式匹配[1-999]之间的所有数字

MSSQL模式匹配[1-999]之间的所有数字,sql,sql-server,sql-server-2008-r2,pattern-matching,Sql,Sql Server,Sql Server 2008 R2,Pattern Matching,我需要一个SQL模式表达式来匹配1和999之间的所有数字 编辑: 在MSSQL中。当在SQL中为字符类使用LIKE运算符模式匹配时,字符类不会像正则表达式中那样出现通配符重复。换句话说,你不能做像[0-9]+或[0-9]{1,3}这样的事情(这两种方法都会捕获0) 所以,在比较之前,你必须将数字归零 它不是直接的模式,但该表达式部分依赖于LIKE运算符,并适用于1到999之间的正整数: RIGHT('00' + myfield, 3) LIKE '[0-9][0-9][0-9]' AND RIG

我需要一个SQL模式表达式来匹配1999之间的所有数字

编辑:


在MSSQL中。

当在SQL中为字符类使用LIKE运算符模式匹配时,字符类不会像正则表达式中那样出现通配符重复。换句话说,你不能做像
[0-9]+
[0-9]{1,3}
这样的事情(这两种方法都会捕获
0

所以,在比较之前,你必须将数字归零

它不是直接的模式,但该表达式部分依赖于LIKE运算符,并适用于1到999之间的正整数:

RIGHT('00' + myfield, 3) LIKE '[0-9][0-9][0-9]'
AND RIGHT('00' + myfield, 3) <> '000'
AND LEN(myfield) <= 3
RIGHT('00'+myfield,3)类似于'[0-9][0-9][0-9]'
右('00'+myfield,3)'000'
和LEN(myfield)

编辑:这仅适用于PostgreSQL

如果要查找与字符串匹配的regexp模式,请执行以下操作:

SELECT * FROM table WHERE field ~ '[1-9][0-9]{1,2}';
查看上的文档

SQL Server目前不支持正则表达式。

你可以使用以下或这个问题:。

@ARZ,也就是SQL,你必须更加具体。1:他明确地说MSSQL。2:您的第一个链接已断开,是从2005年开始的。-只剩下StackEx link。这不是一个答案,而是一个链接。@bshea MSSQL要求是在编辑中添加的(在发布此答案之后)@barbsan然后他们应该在发布非特定问题的特定答案之前询问OP以改进问题。没那么难。“这只适用于PostgreSQL。”??在哪种数据库管理系统中,
会像“[0-9][0-9][0-9]”
一样工作?它当然不像
通配符那样是标准的SQL
(标准SQL只理解
%
\ucode>通配符,没有“范围”),尽管不是所有的,但有些确实在很大程度上支持regex。在MySQL中,您可以编写'WHERE num REGEXP'^[1-9][0-9]{1,2}$'@Hameed:我理解,但是您的示例没有使用
LIKE
操作符。@a_horse_没有名字,虽然严格来说不是SQL-92标准的一部分,但MSSQL支持类似模式的基本字符类,已经很长时间了,它与正则表达式本身无关。其他数据库,包括DB2、Informix和MySQL,都有自定义语言元素来支持更复杂的正则表达式,只是没有使用LIKE运算符。@richardtallent:我知道大多数(所有?)DBMS都支持完整的正则表达式。我的观点是,这不应该与(标准的)
LIKE
操作符混淆,后者定义了一种完全不同的“模式匹配”类型。在模式和通配符搜索方面,并非所有DBM都遵循相同的标准。你需要具体点。最初你的问题也没有正确的标签。
SELECT * FROM table WHERE field ~ '[1-9][0-9]{1,2}';