2015-09-03 189 views
3

在Oracle我可以用轉換ÄÊÍABCDEAEIABCDE轉換爲ASCII字符在SQL Server

SELECT CONVERT('ÄÊÍABCDE', 'US7ASCII') from dual; 

輸出:

AEIABCDE 

我該怎麼辦SQL Server中的一樣嗎?

回答

4

你可以試試下面的查詢:

SELECT CAST('ÄÊÍABCDE' AS varchar(100)) COLLATE SQL_Latin1_General_CP1253_CI_AI 

警告:

這不支持Unicode字符串,這樣不nvarchar

演示SQL小提琴代替varcharhttp://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 

演示鏈接:http://sqlfiddle.com/#!6/9eecb7/2022

+0

'如果 'ÄÊÍABCDE'= CAST( 'ÄÊÍABCDE' 爲varchar(100))COLLATE SQL_Latin1_General_CP1253_CI_AI 打印 '相同' 別的打印「不same''輸出'same'。爲什麼?? – Praveen

2

【答案在從「普利文」註釋的問題]

正如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' 

這應該工作。