gpt4 book ai didi

SQL UDF 适用于字符串,不适用于列

转载 作者:行者123 更新时间:2023-12-01 03:41:41 25 4
gpt4 key购买 nike

我有一个转换 UTF8 字符的函数。当我使用字符串调用该函数时,它按预期工作。

select dbo.fn_PolskieZnaki_utf8('Kraków')

返回 Kraków
但是当我从表中选择一列时,它不起作用。它返回 Kraków .怎么了?
use MyDataBase 
GO
select dbo.fn_PolskieZnaki_utf8(MyColumn)
from MyTable

这是函数本身:
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'ą'),
'Ć', N'Ć'),
'ć', N'ć'),
'Ę', N'Ę'),
'Ä™', N'ę'),
'Å', N'Ł'),
'Å,', N'ł'),
'Ń', N'Ń'),
'Å„', N'ń'),
'Ã"', N'Ó'),
'ó', N'ó'),
'Åš', N'Ś'),
'Å›', N'ś'),
'Ź', N'Ź'),
'Å°', N'ź'),
'Å»', N'Ż'),
'ż', N'ż')
end

最佳答案

这可能是因为 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

附加链接:

COLLATE

Find Collation of Database and Table

What is the meaning of the prefix N in T-SQL statements?

关于SQL UDF 适用于字符串,不适用于列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com