任务是列出站(Tablename)中不以元音开头或不以元音结尾的城市(列)名称。我用子串函数来解决它。下面的代码在MySQL服务器上完成了任务,但在MySQL上给出了不同的输出。
我已经尝试找出了MySQL和MySQL服务器之间的区别。但不知道是什么问题。
SELECT DISTINCT CITY FROM STATION WHERE SUBSTRING(CITY,1,1) NOT IN ('A','E','I','O','U')OR
SUBSTRING(LOWER(CITY),-1,1) NOT IN ('a','e','i','o','u')我希望列不是以元音开头,也不是以元音结尾。
发布于 2019-09-08 10:56:48
由于SUBSTRING()在Server中的起始位置为负值,因此在Server中的行为有所不同:
SUBSTRING(LOWER(CITY),-1,1) NOT IN ('a','e','i','o','u')来自https://learn.microsoft.com/en-us/sql/t-sql/functions/substring-transact-sql?view=sql-server-2017
如果start小于1时,则返回的表达式将从表达式中指定的第一个字符开始。在这种情况下,返回的字符数是开始+长度-1或0之和的最大值。
因此,-1这样的负起始位置并不意味着它将返回字符串的最后一个字符。
但是您可以使用函数RIGHT()获得它。
...OR RIGHT(LOWER(CITY), 1) NOT IN ('a','e','i','o','u')发布于 2019-09-08 10:39:38
您可以将其改写为:
SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY,1) NOT IN ('A','E','I','O','U')
AND RIGHT(CITY,1) NOT IN ('a','e','i','o','u');https://stackoverflow.com/questions/57841148
复制相似问题