我有一个转换UTF8字符的功能。当我使用字符串调用函数时,它按预期工作。
function aFunction(){ /*something*/}
measureTimeExecution("div",aFunction);
返回select dbo.fn_PolskieZnaki_utf8('Kraków')
但是当我从表中选择一列时,它不起作用。它返回Kraków
。有什么问题?
Kraków
这是函数本身:
use MyDataBase
GO
select dbo.fn_PolskieZnaki_utf8(MyColumn)
from MyTable
答案 0 :(得分:2)
这可能是因为您表格中列的collation。
检查此示例查询。
DECLARE @table table(c varchar(50) collate SQL_Polish_Cp1250_CI_AS )
insert into @table values(N'Kraków')
DECLARE @table2 table(c varchar(50) collate SQL_Latin1_General_Cp1_CS_AS )
insert into @table2 values(N'Kraków')
select dbo.fn_PolskieZnaki_utf8('Kraków'),dbo.fn_PolskieZnaki_utf8(c) from @table
select dbo.fn_PolskieZnaki_utf8('Kraków'),dbo.fn_PolskieZnaki_utf8(c) from @table2
<强>输出:强>
Kraków KrakA3w
Kraków Kraków
修改强>
除上述内容外,在使用REPLACE
时的功能中,您在搜索字符N
之前缺少'Ä,,', N'Ą')
。它应该是这样的N'Ä,,', N'Ą')
。
更新的功能将如下所示。
ALTER FUNCTION [dbo].[fn_PolskieZnaki_utf8](@string NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
begin
RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE
(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE
(@string,
N'Ä,,', N'Ą'),
N'Ä...', N'ą'),
N'Ć', N'Ć'),
N'ć', N'ć'),
N'Ę', N'Ę'),
N'Ä™', N'ę'),
N'Å', N'Ł'),
N'Å,', N'ł'),
N'Ń', N'Ń'),
N'Å„', N'ń'),
N'Ã"', N'Ó'),
N'ó', N'ó'),
N'Åš', N'Ś'),
N'Å›', N'ś'),
N'Ź', N'Ź'),
N'Å°', N'ź'),
N'Å»', N'Ż'),
N'ż', N'ż')
end
其他链接:
答案 1 :(得分:0)
最后这个功能对我有用。我改变了角色。在角色必要之前N
。事实证明collate
没有必要。在评论中,我使用那些浓密的角色给一些波兰城市。
CREATE FUNCTION [dbo].[fn_PolskieZnaki_UTF8](@string NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
begin
RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE
(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE
(@string,
N'Ä„', N'Ą'), --RUDA ŚLÄ„SKA
N'Ä…', N'ą'), --ŚlÄ…skie
N'Ć', N'Ć'), --ZAMOŚĆ
N'ć', N'ć'), --Zamość
N'Ä', N'Ę'), --ŁÄCZNA
N'Ę™', N'ę'), --Ostrowiec ŚwiĘ™tokrzyski
N'Ĺ', N'Ł'), --BIAĹA PODLASKA
N'Ĺ‚', N'ł'), --MirosĹ‚awiec
N'Ĺ', N'Ń'), --POZNAĹ
N'Ĺ„', N'ń'), --PoznaĹ„
N'Ă“', N'Ó'), --PIWNICZNA-ZDRĂ“J
N'Ăł', N'ó'), --Piwniczna-ZdrĂłj
N'Ĺš', N'Ś'), --ĹšlÄ…skie
N'Ĺ›', N'ś'), --DolnoĹ›ląskie
N'Ĺą', N'Ź'), --CZELADĹą
N'Ĺş', N'ź'), --ŁódĹş
N'Ĺ»', N'Ż'), --CHODZIEĹ»
N'ĹĽ', N'ż') --ŁomĹĽa
end