我的MySQL
数据库中有一个字段,其中包含具有以下格式的时区的日期:1986-07-10T00:00:00.000+02:00
或1986-07-10T00:00:00.000Z
(Z表示祖鲁时间,或UTC
)。
我正在尝试撰写一个WHERE
子句,用于检查NOW(我的时区= Europe/Brussels
)与日期字段之间的差异是否大于例如18年。有没有办法只用SQL
来完成这个?
我正在阅读一个名为CONVERT_TZ()
的函数,但我不确定我是否朝着正确的方向前进。
答案 0 :(得分:0)
将时间转换为您的时区,您可以做类似的事情:
CONVERT_TZ(
REPLACE(
SUBSTRING(date, 1, 19), # '1986-07-10T00:00:00' .000+02:00
'T',
' '
),
IF(
SUBSTRING(date, 24) = 'Z',
'+00:00',
SUBSTRING(date, 24) # 1986-07-10T00:00:00.000 '+02:00'
),
'Europe/Brussels'
)
来自mysql手册的说明
要使用“MET”或“Europe / Moscow”等命名时区,必须正确设置时区表。有关说明,请参阅Section 10.6, “MySQL Server Time Zone Support”
更新例如 如果表包含: SELECT * FROM so_peter;
+-------------------------------+
| tzdate |
+-------------------------------+
| 1986-07-10T00:00:00.000+02:00 |
| 1986-07-10T00:00:00.000Z |
| 2012-07-18T00:00:00.000+07:00 |
+-------------------------------+
此查询的结果是:
SELECT tzdate FROM so_peter
WHERE CONVERT_TZ(REPLACE(SUBSTRING(tzdate, 1, 19), 'T', ' '), IF(SUBSTRING(tzdate, 24) = 'Z', '+00:00', SUBSTRING(tzdate, 24)), 'Europe/Brussels')
> '1986-07-10 01:00:00';
+-------------------------------+
| tzdate |
+-------------------------------+
| 1986-07-10T00:00:00.000Z |
| 2012-07-18T00:00:00.000+07:00 |
+-------------------------------+