2017-09-22 120 views
4

我已經創建了一個與原始樣本具有相同場景的示例表。 表名 「記錄」 數據庫中的 「測試」基於時區偏移量的MySql搜索時間戳

數據庫時區設置爲UTC (SET TIME_ZONE = 「+00:00」)

 
`records` (`id`, `name`, `time_created`) 

(1, 'motion', '2017-09-13 16:20:41'), 
(2, 'motion', '2017-09-13 16:20:57'), 
(3, 'motion', '2017-09-13 16:21:24'), 
(4, 'motion', '2017-09-13 16:21:40'), 
(5, 'motion', '2017-09-13 16:26:38'), 
(6, 'motion', '2017-09-13 17:09:00'), 
(7, 'motion', '2017-09-13 17:09:16'), 
(8, 'motion', '2017-09-13 22:14:37'), 
(9, 'motion', '2017-09-13 22:23:53'), 
(10, 'motion', '2017-09-13 22:24:08'), 
(11, 'motion', '2017-09-13 22:24:24'), 
(12, 'motion', '2017-09-13 23:45:17'), 
(13, 'motion', '2017-09-13 23:45:36'), 
(14, 'motion', '2017-09-13 23:45:54'), 
(15, 'motion', '2017-09-14 00:07:09'), 
(16, 'motion', '2017-09-14 00:07:24'), 
(17, 'motion', '2017-09-14 00:07:42'), 
(18, 'motion', '2017-09-19 09:42:11'), 
(19, 'motion', '2017-09-19 09:42:27'), 
(20, 'motion', '2017-09-19 09:42:44'), 
(21, 'motion', '2017-09-19 11:21:08'), 
(22, 'motion', '2017-09-19 11:21:23'), 
(23, 'motion', '2017-09-19 11:21:38'), 
(24, 'motion', '2017-09-19 11:21:54'), 
(25, 'motion', '2017-09-19 11:48:13'), 
(26, 'motion', '2017-09-13 16:20:41'), 
(27, 'motion', '2017-09-13 16:20:57'), 
(28, 'motion', '2017-09-13 16:21:24'), 
(29, 'motion', '2017-09-13 16:21:40'), 
(30, 'motion', '2017-09-13 16:26:38'), 
(31, 'motion', '2017-09-13 17:09:00'), 
(32, 'motion', '2017-09-13 17:09:16'), 
(33, 'motion', '2017-09-13 22:14:37'), 
(34, 'motion', '2017-09-13 22:23:53'), 
(35, 'motion', '2017-09-13 22:24:08'), 
(36, 'motion', '2017-09-13 22:24:24'), 
(37, 'motion', '2017-09-13 23:45:17'), 
(38, 'motion', '2017-09-13 23:45:36'), 
(39, 'motion', '2017-09-13 23:45:54'), 
(40, 'motion', '2017-09-14 00:07:09'), 
(41, 'motion', '2017-09-14 00:07:24'), 
(42, 'motion', '2017-09-14 00:07:42'), 
(43, 'motion', '2017-09-19 09:42:11'), 
(44, 'motion', '2017-09-19 09:42:27'), 
(45, 'motion', '2017-09-19 09:42:44'), 
(46, 'motion', '2017-09-19 11:21:08'), 
(47, 'motion', '2017-09-19 11:21:23'), 
(48, 'motion', '2017-09-19 11:21:38'), 
(49, 'motion', '2017-09-19 11:21:54'), 
(50, 'motion', '2017-09-19 11:48:13'); 


我有使用時間的轉換,使兩個查詢使用CONVERT_TZ(mysql conversion function

我需要兩個疑問:1。 取日期間記錄的「今天」和「今天 - 30天回」 2.獲取給定日期記錄,如「2017年9月14日」

我在下面試圖查詢

  1. 記錄日期之間:
  2. 記錄
 
SELECT * FROM test.records WHERE name LIKE '%motion%' 
AND CONVERT_TZ(time_created ,'+00:00','-7:0') BETWEEN DATE_SUB(CONVERT_TZ('2017-09-20 11:48:13' ,'+00:00','-7:0'), INTERVAL 30 DAY) AND CONVERT_TZ('2017-09-20 11:48:13','+00:00','-7:0') 
GROUP BY DATE(time_created) ORDER BY ID DESC; 

result : 
18 motion 2017-09-19 09:42:11 
15 motion 2017-09-14 00:07:09 
1 motion 2017-09-13 16:20:41 

對於給定日期:
 
SELECT name,id, CONVERT_TZ(time_created ,'+00:00','-7:0') as time_created, 
DATE_FORMAT(CONVERT_TZ(time_created ,'+00:00','-7:0') , '%h:%i:%s %p') as new_format_time 
FROM test.records WHERE name LIKE '%motion%' 
AND DATE(CONVERT_TZ(time_created ,'+00:00','-7:0')) = '2017-09-14' ORDER BY ID DESC 
result: 
0 records 

+0

SELECT * FROM test.records WHERE name LIKE'%motion%' AND CONVERT_TZ(time_created,'+ 00:00',' - 7:0') BETWEEN DATE_SUB(CONVERT_TZ('2017-09-20 11 :48:13','+ 00:00',' - 7:0'),INTERVAL 30 DAY)和CONVERT_TZ('2017-09-20 11:48:13','+ 00:00',' - 7:0') GROUP BY DATE(time_created)ORDER BY ID DESC; ---更新後的第一個查詢 –

回答

0

對於第一個,假設你的系統運行在UTC

SELECT * FROM test.records 
    WHERE name LIKE '%motion%' AND 
     time_created >= DATE_SUB(CONVERT_TZ(NOW(),'+00:00','-7:0') , INTERVAL 30 DAY) 
    GROUP BY DATE(time_created) ORDER BY ID DESC; 

如果NOW()是當前時區

SELECT * FROM test.records 
    WHERE name LIKE '%motion%' AND 
     CONVERT_TZ(time_created,'+00:00','-7:0') >= DATE_SUB(NOW(), INTERVAL 30 DAY) 
    GROUP BY DATE(time_created) ORDER BY ID DESC; 

--- EDITED 201/09/25 ---

對於第二個,這是真正重要的是要知道你想要哪個時區與...比較。

select DATE(CONVERT_TZ('2017-09-14 00:07:25','+00:00', '-07:00')); 

會把日期的前一天或2017-09-13(我們已經搬進了比較等式的另一邊,所以我們要改變順序

改變>==,只是使用DATE()

SELECT * 
    FROM test.records 
    WHERE name LIKE '%motion%' AND 
    DATE(CONVERT_TZ(time_created,'-7:0', '+00:00')) = '2017-09-14' 
    GROUP BY DATE(time_created) ORDER BY ID DESC; 

最簡單的比較將對陣UTC和式將是

SELECT * 
    FROM test.records 
    WHERE name LIKE '%motion%' AND 
    DATE(time_created) = '2017-09-14' 
    GROUP BY DATE(time_created) ORDER BY ID DESC; 
+0

Jacques Amar, 感謝您的回覆。 對於第二個查詢,我需要獲取日期「2017-09-14」的記錄,它顯示0結果 –

+0

對不起,我沒有閱讀我的文本,並忘記喲放在日期!編輯 –

+0

雅克阿馬爾再次感謝下鑽 我仍然有同樣的問題0記錄。 您是否在系統上創建了相同的數據? –