powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select 1 where 0 != ''
32 сообщений из 32, показаны все 2 страниц
select 1 where 0 != ''
    #39664164
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день дорогие Эскуэльшики,

Я на борту Microsoft SQL Server 2014 (SP2-CU3) (KB3204388) - 12.0.5538.0 (X64) Dec 15 2016 17:52:48 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: )

Пытаюсь понять почему данное выражение не работает
select 1 where 0 != ''



Если кто хочет знать предысторию, то мне нужна универсальная формула подходящая под любые форматы и данные

ISNULL("OID_FLAG_IN_PRIOR",'') != ''

Т.е. OID_FLAG_IN_PRIOR может быть числом, может быть строкой, там могут быть любые данные
Вышеприведенная простая формула не работает если внутри OID_FLAG_IN_PRIOR я имею 0 и не понимаю вот что MS SQL конвертирует эти значения, как это можно узнать?

Я понимаю что можно сделать OID_FLAG_IN_PRIOR IS NOT NULL and OID_FLAG_IN_PRIOR != '' но мне интересно почему я не могу полагаться на MS SQL
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664166
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

Я понимаю что можно сделать OID_FLAG_IN_PRIOR IS NOT NULL and CAST(OID_FLAG_IN_PRIOR as varchar) != '' но зачем мне писать такую длинную конструкцию, почему я не могу полагаться просто на OID_FLAG_IN_PRIOR != '' ?
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664167
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulllselect 1 where 0 != ''
патамуша гладиолус...
where без from в T-SQL не бывает
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664168
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll, нхнп OID_FLAG_IN_PRIOR > ''
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664169
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll, и да пустая строка покастится к нулю
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664170
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

да хоть LEN > 0 хоть value > ''
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664174
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

авторвот что MS SQL конвертирует эти значения, как это можно узнать?
конвертирует к более высокому приоритету типов
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664175
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxwhere без from в T-SQL не бывает

это начиная с какой версии так?
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664178
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПосетительMaxxwhere без from в T-SQL не бывает

это начиная с какой версии так?
у гладиолусов свой TSQL с WHERE и FROM :)
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664187
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkulllТ.е. OID_FLAG_IN_PRIOR может быть числом, может быть строкой, там могут быть любые данные
Вышеприведенная простая формула не работает если внутри OID_FLAG_IN_PRIOR я имею 0 и не понимаю вот что MS SQL конвертирует эти значения, как это можно узнать?Внутри OID_FLAG_IN_PRIOR вы имеете не 0, а строку '0'
Это же у вас строковое поле?
А далее приоритет операций, как вам уже написали.
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664189
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

автор приоритет операций, типов
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664194
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или, если OID_FLAG_IN_PRIOR численного типа, то у вас не может быть: SkulllЯ понимаю что можно сделать OID_FLAG_IN_PRIOR IS NOT NULL and OID_FLAG_IN_PRIOR != '', потому что вы не можете "хотеть", что бы число было равно или неравно некой строке

Вам тогда нужно всё таки понять, какое условие вы хотите сделать с использованием вашего поля, с учётом типа данных этого поля.
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664195
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvg,

автор приоритет операций, типовДа. оговорился, спасибо за поправку.
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664206
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо,

LEN(любой тип данных) > 0 вроде работает с любым типом данных

а вот value > '' работает только со строками, а вот с числами его нужно прокастить
select 1
where cast(0 as varchar) > ''

так что LEN(value) > 0 более универсальный

Еще раз спасибо
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664208
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgSkulllТ.е. OID_FLAG_IN_PRIOR может быть числом, может быть строкой, там могут быть любые данные
Вышеприведенная простая формула не работает если внутри OID_FLAG_IN_PRIOR я имею 0 и не понимаю вот что MS SQL конвертирует эти значения, как это можно узнать?Внутри OID_FLAG_IN_PRIOR вы имеете не 0, а строку '0'
Это же у вас строковое поле?
А далее приоритет операций, как вам уже написали.

В данном случае OID_FLAG_IN_PRIOR это INT, но есть другие поля с другим именем которые VARCHAR and DECIMAL, этих полей сотни, и я не хочу для разных типов данных писать разный код, я хочу один универсальный который был давал ТРУ если поле не НУЛЛ и не пустая строка
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664210
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

откуда возьмется любой тип данных, если TSQL имеет строгую типизацию? Вы там инъекциями занимаетесь, что ли? Это код с очень плохим запахом.
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664215
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select 1 where 0=1

чет я прогнал, в жизни не разу такое не писал , гы
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664218
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

что-то никто ссылку не дал... Сходите, почитайте:

Приоритет типов данных (Transact-SQL)
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664229
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxselect 1 where 0=1

чет я прогнал, в жизни не разу такое не писал , гыПотому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664237
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapПотому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!
нет... просто за 20 лет не разу не надо такое было честно
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664239
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapSkulll,

что-то никто ссылку не дал... Сходите, почитайте:

Приоритет типов данных (Transact-SQL)

Спасибо, полезная ссылка
Я из Оракла пришел, там можно сказать все наоборот
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664240
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxxiapПотому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!
нет... просто за 20 лет не разу не надо такое было честноА я за 30 делал такое регулярно!
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664242
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkullliapSkulll,

что-то никто ссылку не дал... Сходите, почитайте:

Приоритет типов данных (Transact-SQL)

Спасибо, полезная ссылка
Я из Оракла пришел, там можно сказать все наоборот
а справки читать это вообще только для детей
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/equals-transact-sql?view=sql-server-2017
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664243
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapА я за 30 делал такое регулярно!
ну на вкус и цвет все фломастеры разные :)
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664244
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxxSkulllselect 1 where 0 != ''
патамуша гладиолус...
where без from в T-SQL не бывает

серьёзно? вот это да....
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664245
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинсерьёзно? вот это да....
рад шо сделал вашу пятницу
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664246
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapMaxxпропущено...

нет... просто за 20 лет не разу не надо такое было честноА я за 30 делал такое регулярно!

а некоторые только такое и пишут
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664250
Skulll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с еще одной загадкой MS SQL

select 1
where
LEN(ISNULL(CAST(NULL as int),'')) = 0

select 1
where
LEN(ISNULL(NULL,'')) = 0
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664256
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkulllСтолкнулся с еще одной загадкой MS SQL

select 1
where
LEN(ISNULL(CAST(NULL as int),'')) = 0

select 1
where
LEN(ISNULL(NULL,'')) = 0
удивительно, а отгадка всё таже...
SELECT CAST('' as int)
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664257
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skulll,

и в чем загадка?

Код: sql
1.
2.
3.
4.
5.
6.
select ISNULL(NULL,'') NullStr
      ,LEN(ISNULL(NULL,'')) NullStrLen
      ,SQL_VARIANT_PROPERTY(ISNULL(NULL,''),'BaseType') NullStrType     
      ,ISNULL(CAST(NULL as int),'') NullInt
      ,LEN(ISNULL(CAST(NULL as int),'')) NullIntLen
      ,SQL_VARIANT_PROPERTY(ISNULL(CAST(NULL as int),''),'BaseType') NullIntType
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664269
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkulllalexeyvgВнутри OID_FLAG_IN_PRIOR вы имеете не 0, а строку '0'
Это же у вас строковое поле?
А далее приоритет операций, как вам уже написали.

В данном случае OID_FLAG_IN_PRIOR это INT, но есть другие поля с другим именем которые VARCHAR and DECIMAL, этих полей сотни, и я не хочу для разных типов данных писать разный код, я хочу один универсальный который был давал ТРУ если поле не НУЛЛ и не пустая строкаНу, вот он вам и выдаёт ТРУ, потому что поле не НУЛЛ и не пустая строка.
Что вас не устраивает? А, то, что INT = 0 должно быть равно пустой строке? А почему это не строке "0"? Вообще, что бы сказали разработчики, если бы после очередного апдэйта сиквел стал бы конвертить INT = 0 не в '0', а в ''?

Ничего не поделать, с разными типами придётся работать по разному.
Было бы удобно, если бы была функция типа IsEmpty, но пока нету такой...
...
Рейтинг: 0 / 0
select 1 where 0 != ''
    #39664366
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkulllСтолкнулся с еще одной загадкой MS SQL

select 1
where
LEN(ISNULL(CAST(NULL as int),'')) = 0

select 1
where
LEN(ISNULL(NULL,'')) = 0

Пошёл запашок? А я предупреждал.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select 1 where 0 != ''
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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