我的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()
的函数,但我不确定我的方向是否正确。
要将时间转换为您的时区,您可以执行以下操作:
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"或"欧洲/莫斯科",必须正确设置时区表。有关的说明,请参阅第10.6节"MySQL Server时区支持"
更新示例
如果该表包含:选择*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 |
+-------------------------------+