首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个查询可以写在MS服务器上吗?查询在MySQL上工作,但在上没有提供所需的输出

这个查询可以写在MS服务器上吗?查询在MySQL上工作,但在上没有提供所需的输出
EN

Stack Overflow用户
提问于 2019-09-08 10:36:05
回答 2查看 52关注 0票数 0

任务是列出站(Tablename)中不以元音开头或不以元音结尾的城市(列)名称。我用子串函数来解决它。下面的代码在MySQL服务器上完成了任务,但在MySQL上给出了不同的输出。

我已经尝试找出了MySQL和MySQL服务器之间的区别。但不知道是什么问题。

代码语言:javascript
复制
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')

我希望列不是以元音开头,也不是以元音结尾。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-08 10:56:48

由于SUBSTRING()在Server中的起始位置为负值,因此在Server中的行为有所不同:

代码语言:javascript
复制
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()获得它。

代码语言:javascript
复制
...OR RIGHT(LOWER(CITY), 1) NOT IN ('a','e','i','o','u')
票数 2
EN

Stack Overflow用户

发布于 2019-09-08 10:39:38

您可以将其改写为:

代码语言:javascript
复制
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');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57841148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档