Функция SQL Server возвращает вопросительные знаки вместо реального результата - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть эта функция, которая получает первое слово из строки:

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 голосов
/ 10 декабря 2018

Есть некоторые проблемы

  1. Обязательно Выберите Ключевое слово
  2. Обязательно N при отправке данных Unicode.
  3. Оператор возврата будет правильным

Это вам нужно:

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'ничего не поделаешь')
0 голосов
/ 10 декабря 2018

Это не ответ, а просто доказательство.

Мухамедали Жадигеров, пожалуйста, добавьте ту же картинку, чтобы доказать свои слова

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...