Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Сравнить с пустым значением строки неогр. длины (число прочтений - 3246 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Сравнить с пустым значением строки неогр. длины
08. Февраля 2007 :: 08:59
Печать  
Понадобилось в прямом запросе сравнить значение поля стравочника $spr(поле spxxxx - строка неограниченной длины) с пустым значением.

Методом тыка получился единственный рабочий вариант типа:
where $spr.sp.xxxx like ''

Вопросы:
1. Это есть правильно?
2. Можно ли как-то по другому?
3. Почему здесь не работает отбор по условию "is (not) null" хотя в таблице на этом поле стоит пометка Nulls
  
Наверх
ICQ  
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: Сравнить с пустым значением строки неогр. длин
Ответ #1 - 08. Февраля 2007 :: 09:05
Печать  
насколько знаю, 1С в любом случае чей-то забивает, в БД не может быть NULL значений.
а чем не нравился такой вариант: where $Справочник.Описание = '' ?
Like однозначно тормозить будет сильно.
если не поможет описанный вариант, тогда преобразуй его в varchar
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Сравнить с пустым значением строки неогр. длин
Ответ #2 - 08. Февраля 2007 :: 09:12
Печать  
"Да! - Но нет!!!" (Голохвостов, "За двома зайцями")

Не всё так просто получается...

Для операций такого сравнения со строковыми полями неогр. длины (тип данных text) сервер ессно выдает ошибку:
...State 42000, native 306, message [Microsoft][ODBC SQL Server Driver][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Т.е. можем использовать только "IS NULL or LIKE operator".
Как говорилось выше, на IS NULL сервер не ругается, но и толку от этого сравнения никакого: при IS NULL вообще ничего не находит, при IS NOT NULL выдает все поля, даже с явно пустыми значениями... В отличии от лике '', единственное которое работает так как надо...
Так значит остается только лике? Или у меня опять лыжи не едут?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнить с пустым значением строки неогр. длин
Ответ #3 - 08. Февраля 2007 :: 09:37
Печать  
Можно преобразовать text в varchar, но и Like так уж сильно тормозить не должен, если нет '%' в первой позиции.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Сравнить с пустым значением строки неогр. длин
Ответ #4 - 08. Февраля 2007 :: 10:00
Печать  
Спасибо! Действительно, такая конструкция тоже заработала:
where cast($spr.sp.xxxx as varchar) = (или <>) ''

Значит надо менять лыжи...

Тогда следующий вопрос: что в данном случае работает быстрее: каст, как преобразоватие типа, или лике со строкой нулевой длины?
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнить с пустым значением строки неогр. длин
Ответ #5 - 08. Февраля 2007 :: 13:07
Печать  
Еще как вариант прокатывает LEFT Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать