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

Muk*_*rov 2 sql sql-server utf-8

我有一个从字符串中检索第一个单词的函数:

\n\n
CREATE FUNCTION dbo.FIRST_WORD(@value nvarchar(1000))\nRETURNS nvarchar(1000)\nAS\nBEGIN\nRETURN CASE CHARINDEX(' ', @value, 1)\n       WHEN 0\n         THEN @value\n       ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END\n END\nGO \n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是我的表中的数据是格式化的non-ASCII,所以当我将一些值传递给该函数时,我得到问号而不是结果:

\n\n

SELECT dbo.FIRST_WORD('\xd0\xbd\xd0\xb8\xd1\x87\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbd\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\xd0\xb5\xd1\x88\xd1\x8c')

\n\n

返回:??????

\n\n

但是如果我传递ASCII字符,例如:

\n\n

SELECT dbo.FIRST_WORD('hello world')

\n\n

它返回:hello正如预期的那样。

\n\n

我尝试在参数之前添加N,但没有帮助:

\n\n

SELECT dbo.FIRST_WORD(N'\xd0\xbd\xd0\xb8\xd1\x87\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbd\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\xd0\xb5\xd1\x88\xd1\x8c')

\n\n

仍然返回:??????

\n

Aja*_*707 5

有一些问题

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

这是你需要的:

\n\n
Create FUNCTION dbo.FIRST_WORD (@value nvarchar(max))\n RETURNS nvarchar(1000)\nAS\nBEGIN\n\n Return (Select CASE CHARINDEX(' ', @value, 1)\n   WHEN 0\n     THEN @value\n   ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END)\n\n END\nGO \n\nSelect dbo.FIRST_WORD(N'\xd0\xbd\xd0\xb8\xd1\x87\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbd\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\xd0\xb5\xd1\x88\xd1\x8c')\n
Run Code Online (Sandbox Code Playgroud)\n