MySQL date формат и запрос.

12
MiladyX
На сайте с 23.09.2008
Offline
65
2507

Приветствую, коллеги.

1. Столкнулся с проблемой, в каком формате хранить дату в мускуле?

Если ставить тип столбца date, то появляется 2025-06-10. откуда берётся первое число 20 перед 25?

datetime не подходит, т.к. мне время не нужно хранить.

Если пишу дату например в варчар то всё ок (получаю тот формат, кот хочу).

2.Как сделать запрос по выбору диапазона дат?

Я грешу на тип варчар, запрос такой:



SELECT * FROM tab WHERE date_created > `$date1` AND date_created < `$date2` ORDER BY `id` ASC

но этот запрос не работает.

в бд дата хранится в таком виде - 23.06.10 (варчар), в переменных $date1 и $date2 дата идёт в таком же формате.

N_MONax
На сайте с 22.08.2007
Offline
112
#1

Правильно что не работает. Каким образов варчар определит какая дата больше, либо меньше?

Структура даты у БД не дд-мм-гг а гггг-мм-дд, именно отсюда число 20 и берётся. так как это год. Вообще, юзайте поисковик.

Вот так - http://yandex.ru/yandsearch?text=mysql+date

И вот так - http://phpclub.ru/mysql/doc/date-and-time-functions.html

А вообще дату предпочитаю хранить в unix-timestamp. Там можно и в варчар определить что больше, а что меньше :)

Полный спектр услуг в интернете. Быстро, Качественно, Дорого. Пишите в личку.
P
На сайте с 16.06.2010
Offline
2
#2
А вообще дату предпочитаю хранить в unix-timestamp. Там можно и в варчар определить что больше, а что меньше

Согласен.

А относительно запроса, надо юзать BETWEEN.

Пишу PHP-скрипты :-) (/ru/forum/511256)
Dreammaker
На сайте с 20.04.2006
Offline
570
#3
N_MONax:
А вообще дату предпочитаю хранить в unix-timestamp.

аналогично, только храню как int

AN
На сайте с 05.06.2004
Offline
243
#4
N_MONax:
А вообще дату предпочитаю хранить в unix-timestamp

А до 2038 года осталось 28 лет... Кто как думает, много это или мало?:)

Размещу ваши баннеры на посещаемых сайтах. Места еще есть! Возможен безнал. (/ru/forum/324945) Нужны копирайтеры/рерайтеры - медики. Пишите в личку. (/ru/forum/676932)
Dreammaker
На сайте с 20.04.2006
Offline
570
#5
AnNik:
А до 2038 года осталось 28 лет...

думаю, софт написанный мной к тому времени станет не актуальным. А если и возникнет проблема, то решат её. :)

[Удален]
#6

Узнать откуда какие цифири берутся:

show variables like 'date_format';

Обычно %Y-%m-%d, т.е. 2025 в вашем случае - год.


$date1 = date('Ymd');
$date2 = date('Ymd', strtotime('+2 DAY'));

SELECT * FROM tab WHERE date_created+0 BETWEEN '$date1' AND '$date2' ORDER BY `id` ASC

удачи.

MiladyX
На сайте с 23.09.2008
Offline
65
#7

Спасибо всем..So1, щас попробую ваш вариант. А почему у меня дата пишется не правильная, не сегодняшняя изначально?

[Удален]
#8
MiladyX:
А почему у меня дата пишется не правильная, не сегодняшняя изначально?

потому что вы матчасть не знаете про тип данных "дата" :)

она пишется правильная, вы гдето видели год в нашей эпохе, состоящий из 2 цифр? ;) вот и сервер не видел, поэтому "додумывает" за вас, что вы хотели написать.

N_MONax
На сайте с 22.08.2007
Offline
112
#9
AnNik:
А до 2038 года осталось 28 лет...

Ещё бы в 2038 остались бы 32 битные системы...

N
На сайте с 06.05.2007
Offline
419
#10
N_MONax:
Ещё бы в 2038 остались бы 32 битные системы...

ну попробуйте сделать сейчас на 64битном mysql

select from_unixtime(pow(2,33)) - получите ошибку

проблема не решится простым переходом на 64 бит.

Кнопка вызова админа ()
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий