Выражение случая в предложении WhereMySql

Форум по Mysql
Anonymous
Выражение случая в предложении Where

Сообщение Anonymous »

Не проще ли написать вот это:

Код: Выделить всё

SELECT *
FROM your_table
WHERE CASE
WHEN CURTIME() BETWEEN '11:01:00' AND '15:00:00' THEN created_at BETWEEN CONCAT(CURDATE(), ' 11:01:00') AND CONCAT(CURDATE(), ' 15:00:00')
WHEN CURTIME() BETWEEN '15:01:00' AND '17:00:00' THEN created_at BETWEEN CONCAT(CURDATE(), ' 15:01:00') AND CONCAT(CURDATE(), ' 17:00:00')
ELSE created_at BETWEEN CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 17:01:00') AND CONCAT(CURDATE(), ' 11:00:00')
END;
чем это?

Код: Выделить всё

SELECT *
FROM your_table
WHERE created_at BETWEEN
(
CASE
WHEN CURTIME() BETWEEN '11:01:00' AND '15:00:00' THEN CONCAT(CURDATE(), ' 11:01:00')
WHEN CURTIME() BETWEEN '15:01:00' AND '17:00:00' THEN CONCAT(CURDATE(), ' 15:01:00')
ELSE CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 17:01:00')
END
)
AND
(
CASE
WHEN CURTIME() BETWEEN '11:01:00' AND '15:00:00' THEN CONCAT(CURDATE(), ' 15:00:00')
WHEN CURTIME() BETWEEN '15:01:00' AND '17:00:00' THEN CONCAT(CURDATE(), ' 17:00:00')
ELSE CONCAT(CURDATE(), ' 11:00:00')
END
);
Я получаю те же результаты.

В первый я могу добавить все операторы, которые хочу, а не только созданный_at, например, добавив AND user_id = 1.
Может кто-нибудь объяснить, почему второй лучше.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ere-clause

Вернуться в «MySql»