【发布时间】:2018-12-10 13:57:32
【问题描述】:
我有这个从字符串中检索第一个单词的函数:
CREATE FUNCTION dbo.FIRST_WORD(@value nvarchar(1000))
RETURNS nvarchar(1000)
AS
BEGIN
RETURN CASE CHARINDEX(' ', @value, 1)
WHEN 0
THEN @value
ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END
END
GO
问题是我表中的数据是non-ASCII 格式,所以当我将一些值传递给该函数时,我得到的是问号而不是结果:
SELECT dbo.FIRST_WORD('ничего не поделаешь')
返回:??????
但如果我传递ASCII 字符,例如:
SELECT dbo.FIRST_WORD('hello world')
它按预期返回:hello。
我尝试在参数前添加N,但没有帮助:
SELECT dbo.FIRST_WORD(N'ничего не поделаешь')
仍然返回:??????
【问题讨论】:
-
@marc_s 老兄,仔细阅读问题。
I tried to add N before the argument, but it didn't help: SELECT IMPORT_DATA.FIRST_WORD(N'ничего не поделаешь') -
@marc_s 他说已经试过了,还是不行。
-
@MukhamedaliZhadigerov 你不能改变你的数据库排序规则吗?
-
@iminiki 不,我不能对数据库配置做任何事情,我不是数据库管理员。
-
此函数按预期返回第一个单词,问题有错误信息。该函数在 dbo 模式中创建,被调用的函数在 import_data 模式中。我尝试了 1 分钟 fa 并且它与作为 unicode 传递的西里尔字母(使用 N )正常工作
标签: sql sql-server utf-8