powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему не работает?
6 сообщений из 6, страница 1 из 1
Почему не работает?
    #39776071
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE skud.registration (
  id int(11) NOT NULL AUTO_INCREMENT,
  userid varchar(20) DEFAULT NULL,
  datein timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  dateout timestamp NULL DEFAULT '0000-00-00 00:00:00',
  wplaceid varchar(30) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX id (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 6
AVG_ROW_LENGTH = 3276
CHARACTER SET cp1251
COLLATE cp1251_general_ci;



Почему возвращает пустой результат?
Код: sql
1.
2.
3.
4.
SELECT registration.userid,MIN(TIME_FORMAT(registration.datein,'%H:%i')) AS datein, MAX( TIME_FORMAT(registration.dateout,'%H:%i')) AS dateout
FROM registration 
  WHERE registration.datein=UNIX_TIMESTAMP('2019-02-18')
    GROUP BY registration.userid


Пробовал различные форматы даты:

Код: sql
1.
2.
3.
4.
5.
WHERE registration.datein=UNIX_TIMESTAMP('2019-02-18')
WHERE registration.datein='2019-02-18'
WHERE registration.datein="2019-02-18"
WHERE registration.datein='2019.02.18'
WHERE registration.datein="2019.02.18"


Переворачивал, менял локаль:
SET lc_time_names = 'ru_UA';
SET lc_time_names = 'ru_RU';

не дает результата. В чем проблема?
...
Рейтинг: 0 / 0
Почему не работает?
    #39776072
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные в таблице есть (за это число), вопрос только по выборке, почему-то не хочет искать...
...
Рейтинг: 0 / 0
Почему не работает?
    #39776076
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIMESTAMP - это количество секунд, прошедших с начала эпохи UNIX.
Когда берете функцию вида UNIX_TIMESTAMP('2019-02-18'), то получаете значение на полночь для указанной даты (часы-минуты-секнды в пределах суток не указаны). Есть именно такое значение в таблице?
...
Рейтинг: 0 / 0
Почему не работает?
    #39776084
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleTIMESTAMP - это количество секунд, прошедших с начала эпохи UNIX.
Когда берете функцию вида UNIX_TIMESTAMP('2019-02-18'), то получаете значение на полночь для указанной даты (часы-минуты-секнды в пределах суток не указаны). Есть именно такое значение в таблице?
Да, уже нашел описание... конкретно такого нет.

Проектируется подобие СКУДа(табличка прихода-ухода сотрудника), что посоветуете, оставить текущий тип поля и выбирать через LIKE ( WHERE registration.datein LIKE '2019-02-19%'), либо изменить тип поля на datetime?
...
Рейтинг: 0 / 0
Почему не работает?
    #39776112
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666либо изменить тип поля на datetime?Либо добавить поле для хранения даты (без времени) и проиндексировать его.
...
Рейтинг: 0 / 0
Почему не работает?
    #39776128
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Само выражение WHERE registration.datein=UNIX_TIMESTAMP('2019-02-18') намекает на то, что в этом поле хранится ДАТА. А не дата и время.

И поневоле возникает вопрос - а вот нахрена тогда полю присвоен тип TIMESTAMP, когда есть прямо-таки стопроцентно подходящий тип DATE? из-за DEFAULT CURRENT_TIMESTAMP ? ну так сделайте то же самое триггером:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE skud.registration (
  id int(11) NOT NULL AUTO_INCREMENT,
  userid varchar(20) DEFAULT NULL,
  datein DATE NULL,
  dateout DATE NULL DEFAULT '0000-00-00',
  wplaceid varchar(30) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX id (id)
);
CREATE TRIGGER set_datein 
BEFORE INSERT 
ON skud.registration
FOR EACH ROW
SET NEW.datein = CURRENT_DATE;



Или, если вот прёт от TIMESTAMP - так обрезайте компоненту времени:

Код: sql
1.
WHERE DATE(registration.datein)='2019-02-18'



И UNIX_TIMESTAMP(), кстати, тут сто лет нахрен не нужна - всё равно операнды будут приведены к одному типу, то есть свежеполученный unix timestamp тут же будет опять сконвертирован в datetime...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему не работает?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]