【问题标题】:SQL Server function returns question marks instead of real resultSQL Server 函数返回问号而不是实际结果
【发布时间】: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


【解决方案1】:

有一些问题

  1. 必填选择关键字
  2. 发送 Unicode 数据时需要 N
  3. return 语句将是正确的

这是你需要的:

Create FUNCTION dbo.FIRST_WORD (@value nvarchar(max))
 RETURNS nvarchar(1000)
AS
BEGIN

 Return (Select CASE CHARINDEX(' ', @value, 1)
   WHEN 0
     THEN @value
   ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END)

 END
GO 

Select dbo.FIRST_WORD(N'ничего не поделаешь')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多