|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : yurik shestakov 2:5020/400 12 Dec 2005 19:18:58 To : Artem Chuprina Subject : Re: BerkeleyDB and secondary indexes -------------------------------------------------------------------------------- On Mon, Dec 12, 2005 at 02:44:21PM +0000, Artem Chuprina wrote: ys>>>> select count(*) from foo where '2005-11-1' between lo_date and hi_date; ys>>>> count(*) ys>>>> 0 ys>>>> select count(*) from foo where '2005-11-01' between hi_date and ys>>>> hi_date; count(*) 1 ys>>>> select * from foo; ys>>>> low_date | hi_date ys>>>> 2005-11-01 | 2005-11-09 AC>>> Hо тоже интересно... А тут точно чуши не написано? ys>> Попробуй :-) ys>> У меня вылазит на MySQL server version: 4.1.11-Debian_4sarge2-log ys>> Фокус именно в разнице между '2005-11-1' и '2005-11-01' в операторе ys>> BETWEEN. Если явно брать WHERE low_date='2005-11-1', то находит с ys>> low_date=='2005-11-01' AC> Да нет, я про between hi_date and hi_date и разницу между lo_date и AC> low_date. Второе - явно опечатка... Да, опечатка. AC> А кстати, что будет, если задавать '2005-11-2'? То же самое :-) select count(*) from foo where '2005-11-2' between low_date and hi_date; count(*) 0 select count(*) from foo where '2005-11-02' between low_date and hi_date; count(*) 1 Бага в том, как сравнивает даты MySQL: приведенем строки к дате, или привидением даты к строке. Точнее MySQL использует оба способа. Друг мой говорит, что бага исправлена в версии 5.x (лично мне облом проверять). Hа старых версиях (3.x) бага присутствует так же. ======================================================================== Your MySQL connection id is 2171497 to server version: 3.23.54 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create table foo(low_date date, hi_date date); Query OK, 0 rows affected (0.08 sec) mysql> insert into foo values ('2005-11-1','2005-11-9'); Query OK, 1 row affected (0.00 sec) mysql> select * from foo; +------------+------------+ | low_date | hi_date | +------------+------------+ | 2005-11-01 | 2005-11-09 | +------------+------------+ 1 row in set (0.00 sec) mysql> select count(*) from foo where '2005-11-2' between low_date and hi_date; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) ======================================================================== -- // yurik shestakov --- ifmail v.2.15dev5.3 * Origin: Unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/10069fe32f342.html, оценка из 5, голосов 10
|