Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 select 1 where 0 != ''  [new]
Skulll
Member

Откуда: Чехия
Сообщений: 487
Добрый день дорогие Эскуэльшики,

Я на борту 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
22 июн 18, 12:56    [21512825]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Skulll
Member

Откуда: Чехия
Сообщений: 487
Skulll,

Я понимаю что можно сделать OID_FLAG_IN_PRIOR IS NOT NULL and CAST(OID_FLAG_IN_PRIOR as varchar) != '' но зачем мне писать такую длинную конструкцию, почему я не могу полагаться просто на OID_FLAG_IN_PRIOR != '' ?
22 июн 18, 12:59    [21512838]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Skulll
select 1 where 0 != ''

патамуша гладиолус...
where без from в T-SQL не бывает
22 июн 18, 13:00    [21512842]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Skulll, нхнп OID_FLAG_IN_PRIOR > ''
22 июн 18, 13:01    [21512846]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Skulll, и да пустая строка покастится к нулю
22 июн 18, 13:03    [21512853]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Skulll,

да хоть LEN > 0 хоть value > ''
22 июн 18, 13:03    [21512855]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Skulll,

автор
вот что MS SQL конвертирует эти значения, как это можно узнать?

конвертирует к более высокому приоритету типов
22 июн 18, 13:05    [21512864]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Maxx
where без from в T-SQL не бывает


это начиная с какой версии так?
22 июн 18, 13:05    [21512867]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Посетитель
Maxx
where без from в T-SQL не бывает


это начиная с какой версии так?

у гладиолусов свой TSQL с WHERE и FROM :)
22 июн 18, 13:07    [21512879]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Skulll
Т.е. OID_FLAG_IN_PRIOR может быть числом, может быть строкой, там могут быть любые данные
Вышеприведенная простая формула не работает если внутри OID_FLAG_IN_PRIOR я имею 0 и не понимаю вот что MS SQL конвертирует эти значения, как это можно узнать?
Внутри OID_FLAG_IN_PRIOR вы имеете не 0, а строку '0'
Это же у вас строковое поле?
А далее приоритет операций, как вам уже написали.
22 июн 18, 13:14    [21512906]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alexeyvg,

автор
приоритет операций,
типов
22 июн 18, 13:15    [21512913]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Или, если OID_FLAG_IN_PRIOR численного типа, то у вас не может быть:
Skulll
Я понимаю что можно сделать OID_FLAG_IN_PRIOR IS NOT NULL and OID_FLAG_IN_PRIOR != ''
, потому что вы не можете "хотеть", что бы число было равно или неравно некой строке

Вам тогда нужно всё таки понять, какое условие вы хотите сделать с использованием вашего поля, с учётом типа данных этого поля.
22 июн 18, 13:17    [21512921]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
TaPaK
alexeyvg,

автор
приоритет операций,
типов
Да. оговорился, спасибо за поправку.
22 июн 18, 13:18    [21512924]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Skulll
Member

Откуда: Чехия
Сообщений: 487
Спасибо,

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

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

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

Еще раз спасибо
22 июн 18, 13:35    [21512985]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Skulll
Member

Откуда: Чехия
Сообщений: 487
alexeyvg
Skulll
Т.е. 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, этих полей сотни, и я не хочу для разных типов данных писать разный код, я хочу один универсальный который был давал ТРУ если поле не НУЛЛ и не пустая строка
22 июн 18, 13:37    [21512989]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Skulll,

откуда возьмется любой тип данных, если TSQL имеет строгую типизацию? Вы там инъекциями занимаетесь, что ли? Это код с очень плохим запахом.
22 июн 18, 13:41    [21513003]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select 1 where 0=1

чет я прогнал, в жизни не разу такое не писал , гы
22 июн 18, 13:52    [21513036]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Skulll,

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

Приоритет типов данных (Transact-SQL)
22 июн 18, 13:54    [21513047]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Maxx
select 1 where 0=1

чет я прогнал, в жизни не разу такое не писал , гы
Потому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!
22 июн 18, 13:58    [21513074]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Потому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!

нет... просто за 20 лет не разу не надо такое было честно
22 июн 18, 14:08    [21513112]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Skulll
Member

Откуда: Чехия
Сообщений: 487
iap
Skulll,

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

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


Спасибо, полезная ссылка
Я из Оракла пришел, там можно сказать все наоборот
22 июн 18, 14:10    [21513122]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Maxx
iap
Потому что из Oracle, да?
Там такое нельзя. Там, говорят, dual есть!

нет... просто за 20 лет не разу не надо такое было честно
А я за 30 делал такое регулярно!
22 июн 18, 14:11    [21513124]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Skulll
iap
Skulll,

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

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


Спасибо, полезная ссылка
Я из Оракла пришел, там можно сказать все наоборот

а справки читать это вообще только для детей
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/equals-transact-sql?view=sql-server-2017
22 июн 18, 14:12    [21513129]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
А я за 30 делал такое регулярно!

ну на вкус и цвет все фломастеры разные :)
22 июн 18, 14:12    [21513132]     Ответить | Цитировать Сообщить модератору
 Re: select 1 where 0 != ''  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3673
Maxx
Skulll
select 1 where 0 != ''

патамуша гладиолус...
where без from в T-SQL не бывает


серьёзно? вот это да....
22 июн 18, 14:13    [21513133]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить