0400”之类的时区偏移值转换为mysql中具有冒号“-04:00”的值?

kiayqfof  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(331)

所以我有一个MySQL5.7数据库,它在两个单独的列中存储utc时间戳和时区偏移量。时区在 timezone 偏移量在 offset .
据我所知,我可以通过运行这样的命令,使用 CONVERT_TZ :

CONVERT_TZ(`timestamp`,'+00:00',`offset`)

但我面临的问题是,存储偏移量值时没有用冒号分隔小时和分钟,如下所示: -0400 .
能够正确使用 CONVERT_TZ 我需要改变一下 -0400-04:00 ,但是怎么做?有正则表达式方法吗?
我可以利用 REPLACE ,但这仍然显得草率:

CONVERT_TZ(`timestamp`,'+00:00',REPLACE(`offset`,'00',':00'))
suzh9iv8

suzh9iv81#

要在偏移列中插入冒号,可以使用以下命令:

CONVERT_TZ(`timestamp`,'+00:00',CONCAT(LEFT(`offset`, LENGTH(`offset`)-2),':',RIGHT(`offset`,2)));
bbmckpt7

bbmckpt72#

虽然这个问题的原始答案很有用,但用户“michael-sqlbot”留下的评论更有用。它使用 INSERT() 字符串函数,太好了!

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,':'));

结果如下: 2018-05-28 02:34:58 偏移量为 +0300 变成:
2018-05-28 05:34:58 2018-05-28 07:50:12 偏移量为 +0400 变成:
2018-05-28 11:50:12 2018-05-28 09:23:34 偏移量为 +0530 变成:
2018-05-28 14:53:34 2018-05-28 12:16:56 偏移量为 +1000 变成:
2018-05-28 22:16:56 2018-05-28 16:07:17 偏移量为 -0200 变成:
2018-05-28 14:07:17 2018-05-28 20:02:05 偏移量为 -0700 变成:
2018-05-28 13:02:05 2018-05-28 23:33:03 偏移量为 -1000 变成:
2018-05-28 13:33:03 2018-05-28 23:33:03 偏移量为 -0000 变成: 2018-05-28 23:33:03

相关问题