powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сервер игнорирует хвостовые пробелы
7 сообщений из 7, страница 1 из 1
Сервер игнорирует хвостовые пробелы
    #32006955
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select LEN('а') и select LEN('а ') возвращают 1. Как от этого избавиться если нужна точная длина символьного выражения?
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32006961
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select datalength('a ')
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32006999
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey < Вы, часом, не проверочку на широту кругозора нашего затеяли?
Вот выдержка их 3-го номера журнала SQL Magazine OnLine, за 2000г.:
Использование функции len

Вопрос.
При запуске в SQL Server 7.0 приведенного ниже запроса в результате получается 0, в то время при запуске этого же запроса в SQL Server 6.5 получается 1.

SELECT len(‘ ‘)

Почему это происходит, и какой из ответов верен?

Ответ.
Функция len возвращает длину строки с удаленными «хвостовыми» пробелами. Поскольку в приведенной строке все пробелы являются хвостовыми, SQL Server их исключает (в соответствии с документацией на SQL Server 7.0) и совершенно верно возвращает значение 0. В версии SQL Server 6.5 функция len не поддерживалась корпорацией Microsoft. В Books Online сказано, что функция len “возвращает число знаков (а не количество байтов) в заданной строке, исключая хвостовые пробелы». Отметим, что SQL Server 7.0 корректно обращается с пустыми строками, а SQL Server 6.5 обычно воспринимает пустую строку как один пустой символ.
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32007012
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для Александра Гладченко,
Извиняюсь конечно, но ничей кругозор я проверить не хотел,просто невнимательно читал документацию.
Может заодно объясните почему 'a'='a ' и можно ли этого избежать?
Заранее спасибо.
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32007019
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю почему и как избежать, но обойти можно так:

declare @a1 varchar(9),@a2 varchar(9)

select @a1='a', @a2='a '


select 1 where @a1+'*'=@a2+'*'
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32007058
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для SergSuper
А если нужно чтобы по индексу выборку делать?
...
Рейтинг: 0 / 0
Сервер игнорирует хвостовые пробелы
    #32007061
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то я не доктор

А в данном случае индексы будут использоваться, это можно посмотреть по плану запроса. Что бы уж быть совсем уверенным можно писать так:
select 1 where @a1+'*'=@a2+'*' and @a1=@a2
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сервер игнорирует хвостовые пробелы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]