如何转换时区偏移值,如“-0400&x201D;一个有冒号的“-04:00”;在MySQL中?
因此,我有一个MySQL 5.7数据库,它在两个单独的列中存储UTC时间戳和时区偏移量。时区在如何转换时区偏移值,如“-0400&x201D;一个有冒号的“-04:00”;在MySQL中?,mysql,timestamp,timezone-offset,mysql-5.7,Mysql,Timestamp,Timezone Offset,Mysql 5.7,因此,我有一个MySQL 5.7数据库,它在两个单独的列中存储UTC时间戳和时区偏移量。时区在时区中,偏移量在偏移量中 据我所知,通过运行以下命令,我可以获得非UTC时间计算的实际偏移量: 但我面临的问题是,存储偏移量值时没有用冒号将小时与分钟分开,如下所示:-0400 为了能够正确地使用转换,我需要以某种方式将-0400更改为-04:00,但如何更改?有正则表达式方法吗 我可能会用它来做类似的事情,但这看起来仍然很草率: CONVERT_TZ(`timestamp`,'+00:00',REPL
时区
中,偏移量在偏移量
中
据我所知,通过运行以下命令,我可以获得非UTC时间计算的实际偏移量:
但我面临的问题是,存储偏移量值时没有用冒号将小时与分钟分开,如下所示:-0400
为了能够正确地使用转换,我需要以某种方式将-0400
更改为-04:00
,但如何更改?有正则表达式方法吗
我可能会用它来做类似的事情,但这看起来仍然很草率:
CONVERT_TZ(`timestamp`,'+00:00',REPLACE(`offset`,'00',':00'))
要在偏移列中插入冒号,可以使用以下命令:
CONVERT_TZ(`timestamp`,'+00:00',CONCAT(LEFT(`offset`, LENGTH(`offset`)-2),':',RIGHT(`offset`,2)));
虽然这个问题的原始答案很有帮助,但用户“”留下的评论更有用。它使用了和,我能够设计以下,它的作品伟大
CONVERT_TZ(`timestamp`,'+00:00',INSERT(`offset`,LENGTH(`offset`)-1,0,':'));
这些是使用以下样本时间戳和相关偏移的结果:
SELECT CONVERT_TZ('2018-05-28 02:34:58','+00:00',INSERT('+0300',LENGTH('+0300')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 07:50:12','+00:00',INSERT('+0400',LENGTH('+0400')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 09:23:34','+00:00',INSERT('+0530',LENGTH('+0530')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 12:16:56','+00:00',INSERT('+1000',LENGTH('+1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 16:07:17','+00:00',INSERT('-0200',LENGTH('-0200')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 20:02:05','+00:00',INSERT('-0700',LENGTH('-0700')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-1000',LENGTH('-1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-0000',LENGTH('-0000')-1,0,':'));
结果如下:
- 偏移量为
的+0300
2018-05-28 02:34:58变为:
2018-05-28 05:34:58
- 偏移量为
的+0400
变为:2018-05-28 07:50:12
2018-05-28 11:50:12
- 偏移量为
的+0530
2018-05-28 09:23:34变为:
2018-05-28 14:53:34
- 偏移量为
+1000的
变为:2018-05-28 12:16:56
2018-05-28 22:16:56
- 偏移量为
-0200的
变为:2018-05-28 16:07:17
2018-05-28 14:07:17
- 偏移量为
-0700的
变为:2018-05-28 20:02:05
2018-05-28 13:02:05
- 偏移量为
-1000的
变为:2018-05-28 23:33:03
2018-05-28 13:33:03
- 偏移量为
-0000的
变为:2018-05-28 23:33:03
2018-05-28 23:33:03
REPLACE
更可靠,但这是一个很好的解决方案。RELPACE的问题是,它不适用于所有不按小时对齐的时区。印度是最重要的例子,是+5:30“印度是最重要的例子,是+5:30”好的,这是一个很好的观点,并将其作为答案,因为它解决了这个问题。谢谢你的回答和澄清。或者<代码>转换(`timestamp`,'+00:00',插入(偏移量,长度(偏移量)-2,0',:'))。。。删除len-2处的0个字符,并在其中插入:
,使用。
SELECT CONVERT_TZ('2018-05-28 02:34:58','+00:00',INSERT('+0300',LENGTH('+0300')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 07:50:12','+00:00',INSERT('+0400',LENGTH('+0400')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 09:23:34','+00:00',INSERT('+0530',LENGTH('+0530')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 12:16:56','+00:00',INSERT('+1000',LENGTH('+1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 16:07:17','+00:00',INSERT('-0200',LENGTH('-0200')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 20:02:05','+00:00',INSERT('-0700',LENGTH('-0700')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-1000',LENGTH('-1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-0000',LENGTH('-0000')-1,0,':'));