Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сервер игнорирует хвостовые пробелы / 7 сообщений из 7, страница 1 из 1
05.06.2001, 07:36
    #32006955
Sergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервер игнорирует хвостовые пробелы
select LEN('а') и select LEN('а ') возвращают 1. Как от этого избавиться если нужна точная длина символьного выражения?
...
Рейтинг: 0 / 0
05.06.2001, 07:45
    #32006961
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервер игнорирует хвостовые пробелы
select datalength('a ')
...
Рейтинг: 0 / 0
05.06.2001, 14:58
    #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
06.06.2001, 06:15
    #32007012
Sergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервер игнорирует хвостовые пробелы
Для Александра Гладченко,
Извиняюсь конечно, но ничей кругозор я проверить не хотел,просто невнимательно читал документацию.
Может заодно объясните почему 'a'='a ' и можно ли этого избежать?
Заранее спасибо.
...
Рейтинг: 0 / 0
06.06.2001, 07:40
    #32007019
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервер игнорирует хвостовые пробелы
Не знаю почему и как избежать, но обойти можно так:

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

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


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

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


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