dil: (Default)
dil ([personal profile] dil) wrote2005-09-27 04:13 pm

Товарищи знатоки SQL

вот есть привычный оператор between, который обычно употребляется так:
... WHERE field BETWEEN expr1 AND expr2.

А если его употребить наоборот, например, WHERE expr BETWEEN field1 AND field2, то оно а) будет ли работать? б) везде? в) насколько совместимо с каким-нибудь стандартом языка?

Наводка: в MS SQL работает, я проверял.

[identity profile] grid123.livejournal.com 2005-09-27 03:49 pm (UTC)(link)
Соответствует стандарту SQL92. Любой правильный парсер SQL-я преобразует expr1 BETWEEN expr2 AND expr3 в (expr1 >= expr2) AND (expr1 <= expr3).

[identity profile] dil.livejournal.com 2005-09-27 03:55 pm (UTC)(link)
Тогда уж должно быть примерно так:
expr1 BETWEEN expr2 AND expr3 в (expr1 >= min(expr2, expr3)) AND (expr1 <= max( expr2, expr3))

[identity profile] dma.livejournal.com 2005-09-27 07:31 pm (UTC)(link)
Насколько я понимаю, в expr входит и field.

Короче, должно работать, но на самом деле не знаю.

[identity profile] bofhland.livejournal.com 2005-09-27 10:12 pm (UTC)(link)
Насколько я помню SKL SQL, должно работать.
Замена filed->expr, по краней мере, смысла условия не изменяет, даже расширяя его -- но в таком расширенном виде должно работать. Значит, должно жить везде...

[identity profile] mastre.livejournal.com 2005-09-28 08:13 am (UTC)(link)
в оракле (10ка) не работает
там прямо в доках сказано
[NOT] BETWEEN x AND y
[Not] greater than or equal to x and less than or equal to y.