|
|
|
|
|
для: oradev
(18.08.2007 в 19:20)
| | >p.s. в Oracle такая беда не пройдет
Что мне нравится в оракле куда больше, так это то, что время там не только монотонное, но и линейное, насколько я понимаю, на всей области определения. | |
|
|
|
|
|
|
|
для: oradev
(18.08.2007 в 19:20)
| | Ну что поделаешь,все таки вверху страницы написано не "форум: БД"и не "форум: SQL",а "форум: MySQL" :-D | |
|
|
|
|
|
|
|
для: Trianon
(18.08.2007 в 01:03)
| |
А в первую очередь потому, что строковое представление и календарная временная сущность этого формата - функции монотонные
|
Все проще значит, ну что уж ладно - можно курить трубку.
p.s. в Oracle такая беда не пройдет | |
|
|
|
|
|
|
|
для: oradev
(17.08.2007 в 22:20)
| | >TO Trianon: Любое неявное привидение типов нежелательно!
В принципе - да.
>Ибо если есть индекс по дате какой-нить - то если условие селективное - все равно получим FULL SCAN по табличке
Не получим. Разработчики MySQL не за красивые глаза выбрали восточный формат внешнего представления календарных данных. И не из любви к китайцам. А в первую очередь потому, что строковое представление и календарная временная сущность этого формата - функции монотонные. Для любых двух меток времени А и Б, таких что время наступления А раньше времени наступления Б -- строковое представление А также будет лексикографически меньше строкового представления Б, и наоброт.
Так что индекс вместо полного прохода можно использовать даже если написать
SELECT * FROM tbl WHERE LEFT(dt,4) BETWEEN 1966 AND 2007 | |
|
|
|
|
|
|
|
для: Trianon
(17.08.2007 в 21:59)
| | TO Trianon: Любое неявное привидение типов нежелательно!
Ибо если есть индекс по дате какой-нить - то если условие селективное - все равно получим FULL SCAN по табличке | |
|
|
|
|
|
|
|
для: oradev
(17.08.2007 в 13:06)
| | Для MySQL - способ, предложенный cheops'ом - абсолютно корректный. | |
|
|
|
|
|
|
|
для: Ralph
(17.08.2007 в 13:31)
| | За всех не надо говорить
SELECT *
FROM emp
WHERE hiredate BETWEEN DATE '1980-04-02' AND DATE '1981-12-31';
|
С целью явного привидения типов лучше использовать ANSI совместимую date, либо
с помощью других функций преобразования строки в дату. Например, если речь идет о СУБД Oracle таковой является ф-ция to_date('01.02.1990','DD-MM-YYYY') выполняющая явное преобразование. | |
|
|
|
|
|
|
|
для: oradev
(17.08.2007 в 13:06)
| | Значит,ни я,ни тов. Cheops неправы... Жаль... Ну тогда обьясните нам,как правильно ? | |
|
|
|
|
|
|
|
для: Ralph
(15.08.2007 в 20:31)
| | Только вот так делать нельзя, если не хотим получить неявное преобразование строки в дату. | |
|
|
|
|
|
|
|
для: diez
(15.08.2007 в 17:58)
| | Исправьте запросы следующим образом
SELECT name FROM clients WHERE bd BETWEEN '1972-01-01' AND '1975-01-01';
SELECT name FROM clients WHERE bd >='1972-01-01';
|
| |
|
|
|
|