Sql-Server
當字元串包含阿拉伯語單詞時,如何在 SELECT CASE 中創建新列?
我的 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