MySQL: как установить условие `HAVING` для отметки времени этого фильтра после запроса? - PullRequest
0 голосов
/ 21 октября 2019

Это первый раз, когда я пытаюсь использовать предложение 'HAVING' в своем SQL: мне нужно только показывать клиенту элементы в допустимом периоде. Меня очень смущает результат теста:

MariaDB [n4_2]> CREATE TABLE `test_01` (
    ->   `create_time` INT(11) UNSIGNED NOT NULL,
    ->   `expire_time` INT(11) UNSIGNED NOT NULL
    -> );
Query OK, 0 rows affected (0.012 sec)

MariaDB [n4_2]> INSERT INTO `test_01` VALUES (1495000000, 1790000000);
Query OK, 1 row affected (0.003 sec)

MariaDB [n4_2]> SELECT
    ->   UNIX_TIMESTAMP() AS "timeStamp",
    ->   `test_01`.`expire_time` AS "expire_time",
    ->   `test_01`.`expire_time` - UNIX_TIMESTAMP() AS "diff"
    -> FROM `test_01`
    -> HAVING "timeStamp" > "expire_time";
+------------+-------------+-----------+
| timeStamp  | expire_time | diff      |
+------------+-------------+-----------+
| 1571664550 |  1790000000 | 218335450 |
+------------+-------------+-----------+
1 row in set (0.000 sec)

MariaDB [n4_2]> SELECT
    ->   UNIX_TIMESTAMP() AS "timeStamp",
    ->   `test_01`.`expire_time` AS "expire_time",
    ->   `test_01`.`expire_time` - UNIX_TIMESTAMP() AS "diff"
    -> FROM `test_01`
    -> HAVING "timeStamp" < "expire_time";
Empty set (0.000 sec)

Вопрос в том, почему условие HAVING "timeStamp" < "expire_time" не может получить запись, а условие HAVING "timeStamp" >= "expire_time" - запись? Очевидно, что временная метка NOW меньше, чем expire_time.

...