“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 标准的一部分吗?的主要内容,如果未能解决你的问题,请参考以下文章