“charlist”样式通配符是 SQL-92 标准的一部分吗?

Posted

技术标签:

【中文标题】“charlist”样式通配符是 SQL-92 标准的一部分吗?【英文标题】:Are "charlist" style wildcards part of the SQL-92 standard? 【发布时间】:2010-10-29 00:13:27 【问题描述】:

SQL 通配符“%”和“_”有据可查并且广为人知。然而,作为w3schools explains,还有“charlist”样式的通配符用于匹配给定范围内或外的单个字符,例如查找所有叫 Carl 而不是叫 Earl 的人:

select * from Person where FirstName like '[A-D]arl'

...或找到相反的,使用:

select * from Person where FirstName like '[!A-D]arl'

或(可能取决于 RDBMS):

select * from Person where FirstName like '[^A-D]arl'

这种类型的通配符是 SQL-92 标准的一部分,哪些数据库实际支持它?例如:

Oracle 11g 不支持它 SQL Server 2005 支持它,否定运算符是“^”(不是“!”)

【问题讨论】:

刚刚在 PostgreSQL 8.4 和 Teradata 中尝试过。似乎不起作用。高度怀疑它是 ANSI 标准语法。 这可能会有所帮助:***.com/questions/712580/… 这确实很有帮助,但你的用户名肯定让我很困惑! :-) :) - 我一时兴起改了它以回应别人的愚蠢用户名,结果发现我不能将它改回一个月 - doh! 【参考方案1】:

SQL-99 标准有一个SIMILAR TO 谓词,它使用“charlist”样式以及“%”和“_”通配符。

但在 SQL-92 标准中没有类似的(没有双关语)。

【讨论】:

好的,我会试试这个而不是 LIKE。【参考方案2】:

“charlist”运算符看起来像正则表达式,或者它们的有限子集。 AFAIK 尽管许多数据库支持正则表达式,但 SQL-92 中没有指定正则表达式语法,并且它们支持它的方式各不相同。例如,Oracle 具有执行正则表达式比较和替换的功能。不知道别人是怎么做到的。

分享和享受。

【讨论】:

以上是关于“charlist”样式通配符是 SQL-92 标准的一部分吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL的通配符

SQL基本操作——通配符

SQL Server:SQL 通配符

sql语句中通配符有几种

SQL 通配符

mssql中一个简单的模糊查询语句怎么写请教大侠们