使T-SQL函数区分大小写

时间:2015-04-06 21:05:02

标签: sql sql-server case-sensitive collate

我有以下T-SQL功能

FUNCTION dbo.UrlEncode(@url NVARCHAR(1024))
RETURNS NVARCHAR(3072)
AS
BEGIN
   DECLARE  @urlReturn NVARCHAR(3072)

   SET @urlReturn = REPLACE(@url,'Á','%c3%81') COLLATE Latin1_General_CS_AS  

   SET @urlReturn = REPLACE(@url,,'á','%c3%a1')   

    RETURN @urlReturn
END

但如果我跑:

SELECT dbo.UrlEncode('Áreá')

它返回

%c3%a1re%c3%a1

我需要它返回

%c3%81re%c3%a1

有没有办法让功能区分大小写,我试过COLLATE Latin1_General_CS_AS但没有成功

谢谢

1 个答案:

答案 0 :(得分:1)

您应在要替换的部件旁边指定区分大小写的排序规则。 然后应将第二个REPLACE应用于上一个REPLACE的结果:

DECLARE @urlReturn NVARCHAR(3072)
SET @urlReturn = REPLACE(@url ,'Á' COLLATE Latin1_General_CS_AS ,'%c3%81' )  

SET @urlReturn = REPLACE( @urlReturn ,'á','%c3%a1') 
SELECT @urlReturn