Sql-Server

當字元串包含阿拉伯語單詞時,如何在 SELECT CASE 中創建新列?

  • April 26, 2021

我的 select case when 語句有問題,我想在 select case when 語句中添加一個新列,我得到了結果,但是?????因為我已將該列設置為阿拉伯語單詞,所以我嘗試將內容轉換為不幸nvarchar(55)的是,我得到了相同的結果。

我怎樣才能得到正確的結果?

SELECT case when ( CAST(o.startTime as time(7)) > cast(Start as time(7))) 
         then  cast('قدوم' as nvarchar(55))
         else cast('رجوع' as nvarchar(55)) end as stat,
      userId, FirstName
from   Users, TimeTable

在這種情況下,因為您NVARCHAR在演員表中使用了支持整個Unicode字元集的數據類型,所以您在臨時字元串的前綴中缺少的只是N表示 SQL Server 將字元串視為 的字元NVARCHAR,此時使您的CAST()函式呼叫變得多餘並且也不需要。例如SELECT N'Some Text',將產生一個NVARCHAR字元串,而不是僅僅SELECT 'Some Text'產生一個VARCHAR字元串。

Solomon Rutzky 的回答也提供了一個明確的例子,提供了更深入的資訊。


對於在使用(或類似)數據類型時遇到此問題的任何人VARCHAR,以下是您正在尋找的機器人

您需要在列、表、數據庫或伺服器實例級別使用支持排序規則的阿拉伯字元,例如Arabic_CI_AI_KS_WS.

這個StackOverflow 答案有很好的資訊。

對於臨時查詢和值,您應該能夠根據需要使用該COLLATE函式。例如,如果我們需要使用您的上述查詢VARCHAR

SELECT
   case 
       when (CAST(o.startTime as time(7)) > cast(Start as time(7))) then  cast(N'قدوم' COLLATE Arabic_CI_AI_KS_WS as varchar(55)) 
       else cast(N'رجوع' COLLATE Arabic_CI_AI_KS_WS as varchar(55)) end as stat,
   userId, 
   FirstName 
from Users,TimeTable

引用自:https://dba.stackexchange.com/questions/290340