Когда я использую ПРАВУЮ функцию в SSMS, она дает пустой результат, хотя нет дополнительного места - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь использовать правую функцию в SQL Server Management Studio 17. Но я продолжаю получать пустой результат. Я использовал функцию TRIM для обновления моих данных, а затем использовал функцию LEN для проверки длины, в этом столбце нет лишнего пространства.

enter image description here

enter image description here

Но когда я использовал функцию TRIM внутри RIGHT, я мог получить желаемый результат.

enter image description here

Так в чем здесь проблема и как я могу ее решить?

Спасибо!

SELECT RIGHT(FIRST_NAME,3) FROM Worker;
SELECT LEN(FIRST_NAME) FROM Worker;
SELECT RIGHT(TRIM(FIRST_NAME),3) FROM Worker;

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Это известная особенность использования LEN. Вместо этого просто переключитесь на DATALENGTH, и вы получите правильную длину для каждого столбца:

SELECT DATALENGTH(FIRST_NAME) FROM Worker;

Для LEN, взято здесь непосредственно из статьи :

Возвращает количество символов указанного строкового выражения, исключая конечные пробелы .

И DATALENGTH по очереди:

Возвращает количество байтов, использованных для представления любого выражения.

Если вы хотите удалить завершающие пробелы из существующих строк, выполните простой запрос UPDATE:

UPDATE Worker SET FIRST_NAME = TRIM(FIRST_NAME);
0 голосов
/ 06 января 2019

Возможно, проблема в том, что вы используете char() вместо varchar() для first_name. Это автоматически дополняет имя пробелами.

Как правило, вы хотите хранить строки как varchar(). В некоторых случаях полезно использовать char(), например, для кодов стран, которые состоят из 2 или 3 символов. А вообще хочешь varchar().

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