SQL-比较不同时区的日期



我的MySQL数据库中有一个字段,其中包含一个时区为以下格式的日期:1986-07-10T00:00:00.000+02:001986-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 |
+-------------------------------+

相关内容

  • 没有找到相关文章

最新更新