- 1
select count(*) from jxlspp_prices where 0!=0 or catid = 2 }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−119
select count(*) from jxlspp_prices where 0!=0 or catid = 2 }
А вот так его!
Где.. в параллельной вселенной конечно же!
where NULL!=NULL вернуло бы true, но уже в нашей вселенной.
http://ideone.com/vkKvb
Впрочем согласен.
поэтому is NULL
P.S. Ой, это SQL а не С++. Тогда любая операция с NULL (кроме is) всегда возвращает NULL, который в условных операторах засчитывается как false.
( http://govnokod.ru/10055 )
Да, обстановка на ГК в те времена была намного душевнее...
На некоторых платформах вернет false, а на некоторых true
>WHERE sin(100500) <= 1.0
head asplodes.
(и молимся, чтобы SQL считал это во флоатах, а не в децималах)
http://ideone.com/w6PRN
http://ideone.com/BAPoe
Как 0.1, так и 0.2 и 0.3 это бесконечные двоичные дроби:
0.1 = 0.00(0011) = 0.0000110011...
0.2 = 0.00(0110) = 0.0001100110...
0.3 = 0.00(1001) = 0.0010011001...
Если складывать так - все ок:
0.0000110 + 0.0001100 = 0.0010010
Если же на один разряд больше - то фейл:
0.00001100 + 0.00011001 = 0.00100101
Если еще на один разряд больше - опять все ок:
0.000011001 + 0.000110011 = 0.001001100
> в то время, когда флоат ещё не расходится из-за большей дискретности (больше растояние между дискретами), то даубл уже поехал.
Не-не-не девид блейн. Дискретность и то что дабл длиннее флоата тут к делу совершенно не относится. Тут дело в точном количестве разрядов - если бы дабл был бы на разряд короче или длиннее - получился бы корректный ответ. А если флоат был бы на 1-2 разряда короче, лень считать на сколько именно, то он бы тоже глючил. Вот так.
А мне не бывает лениво сделать в склейке условий '<условие> AND ' и после всей цепочки сделать сабстринг или лефт без 5-ти символов последних.
Зато на выхлопе запрос - красота.
Но против 1=1 ничего не имею, техника неплохая.
Нужен какой-то форматтер, который будет это учитывать. А не изобретать велосипед.
Почему просто не написать "SELECT * FROM `xxx` WHERE 1; " или "SELECT * FROM `zzz` WHERE 0; " или "SELECT * FROM `xxx` WHERE true; "
или просто "SELECT * FROM `xxx`"?
В данном случае "where 0!=0 or catid = 2" равносильно "SELECT * FROM `xxx` where catid = 2".
На кой здесь вычисления и сравнения?
Так точно, Кэп.