簡體   English   中英

可以在MS SQL服務器上編寫此查詢嗎? 該查詢可在MySQL上運行,但無法在MS SQL Server上提供所需的輸出

[英]Can this query be written on MS SQL server? The query works on MySQL but does not give the desired output on MS SQL Server

任務是列出STATION(表名)中不以元音開頭或不以元音結尾的CITY(列)名稱。 我已經解決了使用子串功能。 下面的代碼在MySQL服務器上完成了任務,但在MS SQL SERVER上給出了不同的輸出。

我試圖找到MySQL和MS SQL Server之間的區別。 但是不知道是什么問題。

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')

我希望列不以元音開頭或不以元音結尾。

您可以將其重寫為:

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');

SUBSTRING()在SQL Server中的行為有所不同,這是因為以下位置的起始位置為負:

SUBSTRING(LOWER(CITY),-1,1) NOT IN ('a','e','i','o','u')

https://docs.microsoft.com/zh-cn/sql/t-sql/functions/substring-transact-sql?view=sql-server-2017

如果start小於1,則返回的表達式將從表達式中指定的第一個字符開始。 在這種情況下,返回的字符數是start + length-1或0之和的最大值。

因此,像-1這樣的負起始位置並不意味着它將返回字符串的最后一個字符。
但是您可以使用RIGHT()函數得到它:

...OR RIGHT(LOWER(CITY), 1) NOT IN ('a','e','i','o','u')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM