在Oracle中,我可以使用:
将ÄÊÍABCDE
转换为AEIABCDE
SELECT CONVERT('ÄÊÍABCDE', 'US7ASCII') from dual;
输出:
AEIABCDE
如何在SQL Server中执行相同操作?
答案 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上的collate: 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
答案 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'
这应该有用。