在sql server中转换为ASCII char

时间:2015-09-03 05:02:31

标签: sql-server tsql sql-server-2012

在Oracle中,我可以使用:

ÄÊÍABCDE转换为AEIABCDE
SELECT CONVERT('ÄÊÍABCDE', 'US7ASCII') from dual;

输出:

AEIABCDE

如何在SQL Server中执行相同操作?

2 个答案:

答案 0 :(得分:6)

您可以尝试以下查询:

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

<强>警告:

这不支持UNICODE字符串,因此请勿将varchar替换为nvarchar

demo sql fiddle:http://sqlfiddle.com/#!6/9eecb7/2016

<强>解释

在这里阅读MSDN上的collat​​e: https://msdn.microsoft.com/en-us/library/ms184391.aspx

修改

评论

  

如果'ÄÊÍABCDE'= CAST('ÄÊÍABCDE'ASvarchar(100))COLLATE   SQL_Latin1_General_CP1253_CI_AI打印'相同'其他打印'不相同'   打印相同。为什么?

整理被迫在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

答案 1 :(得分:2)

[回答'Praveen'评论中的问题]

正如DhruvJoshi在答案中所解释的那样,整理都是强制双方的。

要解决此问题,您可以创建一个函数(执行整理),将“字符串整理”作为参数并返回整理字符串

然后您可以在检查条件的一侧调用该函数。

该功能可能如下所示:

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'

这应该有用。