SQL Server函数返回问号而不是实际结果

时间:2018-12-10 05:28:38

标签: sql sql-server utf-8

我有这个功能,可以从字符串中检索第一个单词:

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'ничего не поделаешь')

仍返回:??????

2 个答案:

答案 0 :(得分:3)

有一些问题

  1. 必需的选择关键字
  2. 发送Unicode数据时
  3. 必填 N
  4. 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'ничего не поделаешь')

答案 1 :(得分:0)

这不是答案,而只是证明。

Mukhamedali Zhadigerov,请添加同一张图片以证明您的话

enter image description here