在Oracle我可以用轉換ÄÊÍABCDE
到AEIABCDE
:轉換爲ASCII字符在SQL Server
SELECT CONVERT('ÄÊÍABCDE', 'US7ASCII') from dual;
輸出:
AEIABCDE
我該怎麼辦SQL Server中的一樣嗎?
在Oracle我可以用轉換ÄÊÍABCDE
到AEIABCDE
:轉換爲ASCII字符在SQL Server
SELECT CONVERT('ÄÊÍABCDE', 'US7ASCII') from dual;
輸出:
AEIABCDE
我該怎麼辦SQL Server中的一樣嗎?
你可以試試下面的查詢:
SELECT CAST('ÄÊÍABCDE' AS varchar(100)) COLLATE SQL_Latin1_General_CP1253_CI_AI
警告:
這不支持Unicode字符串,這樣不nvarchar
演示SQL小提琴代替varchar
:http://sqlfiddle.com/#!6/9eecb7/2016
說明:
閱讀MSDN約整理的位置: https://msdn.microsoft.com/en-us/library/ms184391.aspx
編輯:
在評論
如果 'ÄÊÍABCDE'= CAST( 'ÄÊÍABCDE' 爲varchar( 100))COLLATE SQL_Latin1_General_CP1253_CI_AI print'same'else print'not same' print same。爲什麼??
整理強制在WHERE
條件中,該條件對比較的兩側。如果您需要not same
的結果,請嘗試以下
declare @t varchar
set @t= CAST('ÄÊÍABCDE' AS varchar(100))
COLLATE SQL_Latin1_General_CP1253_CI_AI
select
case
when 'ÄÊÍABCDE' like @t
then 'same' else 'not same' end as result
【答案在從「普利文」註釋的問題]
正如DhruvJoshi,整理的答案解釋在雙方都被迫。
要解決此問題,您可以創建一個函數(即進行覈對),它採用了「string要整理」作爲參數和返回整理串。
然後,您可以在檢查條件的一側調用該函數。
功能可能是這個樣子:
create function dbo.convert_ascii(@input nvarchar(500))
returns varchar(500)
as
begin
declare @collatedstring varchar(500)
set @collatedstring = CAST(@input AS varchar(100))
COLLATE SQL_Latin1_General_CP1253_CI_AI
return collatedstring
end
你可以調用這樣說:
if 'ÄÊÍABCDE' = dbo.convert_ascii('ÄÊÍABCDE')
print 'same'
else
print 'not same'
這應該工作。
'如果 'ÄÊÍABCDE'= CAST( 'ÄÊÍABCDE' 爲varchar(100))COLLATE SQL_Latin1_General_CP1253_CI_AI 打印 '相同' 別的打印「不same''輸出'same'。爲什麼?? – Praveen