Выбранные строки в таблице MySQL на временном интервале - PullRequest
0 голосов
/ 08 мая 2019

Это моя dotable на MySQL база данных:

+--------------+------------+----------+
| sID          | sDate      | sHour    |
+--------------+------------+----------+
| 1440190025   | 2019-05-08 | 02:46:01 |
| 1440190019   | 2019-05-07 | 16:06:01 |
| 1440190017   | 2019-05-07 | 12:59:02 |
| 1440190013   | 2019-05-07 | 10:56:14 |
+--------------+------------+----------+

Мне нужно выбрать на этом dotable все строки, включенные в это времяслот:

18:00:00-00:00:00

с уменьшением на три часа времени начала ( -3 часа на 18: 00: 00 ) и добавлением трех часов к последнему часу ( + 3)часы в 00: 00: 00 ):

-3 18:00:00 >>> 15:00:00 
+3 00:00:00 >>> 03:00:00 

Я пробовал этот запрос SQL:

mysql> SELECT
    sID,
    sDate,
    sHour
FROM
    dotable
WHERE
    sHour BETWEEN ADDTIME(
        SUBSTRING_INDEX('18:00:00-00:00:00', '-', 1) ,- 30000
    )
AND ADDTIME(
    SUBSTRING_INDEX('18:00:00-00:00:00', '-', - 1),
    30000
);
+------------+------------+----------+
| sID        | sDate      | sHour    |
+------------+------------+----------+
| 1440190019 | 2019-05-07 | 16:06:01 |
+------------+------------+----------+
1 row in set

mysql> 

Этот вывод не показывает sID счисло 1440190025 , хотя значение sHour включено во время слота 15: 00: 00 - 03: 00: 00 .

Делать кому-либоесть идеи почему?

мой код ниже.

DROP TABLE IF EXISTS `dotable`;
CREATE TABLE `dotable` (
  `sID` int(10) NOT NULL AUTO_INCREMENT,
  `sDate` date DEFAULT NULL,
  `sHour` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`sID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of dotable
-- ----------------------------
INSERT INTO `dotable` VALUES ('1440190013', '2019-05-07', '10:56:14');
INSERT INTO `dotable` VALUES ('1440190017', '2019-05-07', '12:59:02');
INSERT INTO `dotable` VALUES ('1440190019', '2019-05-07', '16:06:01');
INSERT INTO `dotable` VALUES ('1440190025', '2019-05-08', '02:46:01');

1 Ответ

1 голос
/ 09 мая 2019

Надеюсь, я вам помог.

mysql> SELECT
    sID,
    sDate,
    sHour
FROM
    `dotable`
WHERE
    sHour >= ADDTIME(
        SUBSTRING_INDEX('18:00:00-00:00:00', '-', 1) ,- 30000
    )
OR sHour <= ADDTIME(
    SUBSTRING_INDEX('18:00:00-00:00:00', '-', - 1),
    30000
);


+------------+------------+----------+
| sID        | sDate      | sHour    |
+------------+------------+----------+
| 1440190019 | 2019-05-07 | 16:06:01 |
| 1440190025 | 2019-05-08 | 02:46:01 |
+------------+------------+----------+
2 rows in set
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...