我在w3schools学习SQL。我正在学习这一章:https://www.w3schools.com/sql/sql_having.asp
我决定使用通配符,只是为了让它更有趣。当我在线尝试第一个SQL语句时,它似乎可以工作,但第二个SQL语句不起作用。这就是为什么我想知道这两个SQL语句是否等价。
1)
SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE Country LIKE 'u%' OR Country LIKE 'g%' OR Country LIKE 'f%'
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;
2)
SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE Country LIKE '[ugf]%'
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;
它没有显示错误消息,它只显示"No result“。当我在这里尝试第二个SQL语句时:https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_having
第一条SQL语句可以工作。
发布于 2019-06-11 01:28:25
这两者仅在SQL Server (和Sybase)中等效。它们扩展了LIKE
模式以包括字符类(方括号内的字母)。
在其他数据库中,LIKE
模式只有两个通配符%
和_
。方括号就是,方括号。国家名称不太可能与它们相匹配。
发布于 2019-06-11 01:28:12
如果您使用的是T-SQL,则它们是等效的。[]
语法是Microsoft SQL Server/Sybase扩展。
发布于 2019-06-11 01:42:21
正如其他人所说,这只适用于SQL Server和Sybase。Oracle的等价物将需要使用REGEXP_LIKE函数来允许正则表达式匹配:
SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE regex_like(Country, '^[ugf]','c')
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;
https://stackoverflow.com/questions/56530908
复制相似问题