Могу ли я использовать sub Select вместо выражения DateTime в функции MySQL TIMESTAMPDIFF? - PullRequest
0 голосов
/ 30 октября 2018

Я хочу рассчитать общее количество секунд между временем начала и времени окончания. И, очевидно, TIMESTAMPDIFF в MySQL хорошо справляется с работой с DateTime выражениями типа

SELECT TIMESTAMPDIFF(SECOND,'2018-10-30 04:45:42','2018-10-30 06:01:42');

Но я хочу использовать Sub Selects для замены выражений. Но я получаю ошибку.

SELECT TIMESTAMPDIFF(SECOND,
                    (SELECT TIMESTAMP(start_time) 
                     FROM shift 
                     WHERE TIME(NOW()) >= start_time AND 
                     TIME(NOW()) <= end_time) AS start_time, NOW())

Итак, все мои вопросы таковы: возможно ли заменить выражение DateTime в TIMESTAMPDIFF на Sub Selects? Как мне этого добиться?

Обновление: Подэлемент выбора в TIMESTAMPDIFF возвращает скалярное значение, т.е. метку времени, т.е. 2018-10-30 06: 00: 00 .

1 Ответ

0 голосов
/ 30 октября 2018

Можно, но подзапросами должны быть скалярные подзапросы. Скалярный подзапрос возвращает один столбец и не более одной строки. Вы можете сделать это, используя limit 1 или функцию агрегирования (без group by).

Предположительно, вы хотите запрос, подобный следующему:

select TIMESTAMPDIFF(SECOND, TIMESTAMP(start_time), NOW())
from shift
where TIME(NOW()) >= start_time and TIME(NOW()) <= end_time;

EDIT:

Если у вас есть скалярный подзапрос, то:

SELECT TIMESTAMPDIFF(SECOND,
                     (SELECT TIMESTAMP(start_time) 
                      FROM shift 
                      WHERE TIME(NOW()) >= start_time AND 
                            TIME(NOW()) <= end_time
                     ), NOW()
                    ) 

as start_time не принадлежит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...