PostgreSQL中将所有行的悉尼本地时间转换为UTC的方法
解决悉尼时间转UTC的批量更新问题
你的错误是因为子查询返回了表中所有行的结果,而SET子句需要的是当前行对应的转换值,不需要嵌套子查询。直接在UPDATE中逐行处理每个time字段即可。
正确的SQL语句
UPDATE time_table SET time = (time AT TIME ZONE 'Australia/Sydney') AT TIME ZONE 'UTC';
语句说明
time AT TIME ZONE 'Australia/Sydney':将表中存储的无时区timestamp值,转换为代表悉尼本地时间的带时区时间(timestamptz类型),自动适配悉尼的夏令时/冬令时偏移。AT TIME ZONE 'UTC':将带时区的悉尼时间转换为UTC时区的无时区timestamp值,得到最终需要的结果。
转换结果验证
- 原时间
2022-10-01 00:00(悉尼夏令时+11):转换后为2022-09-30 14:00,与你的期望一致。 - 原时间
2022-10-31 23:59(悉尼夏令时+11):转换后应为2022-10-31 12:59,你给出的期望结果可能存在笔误,实际计算需遵循时区偏移规则。
内容的提问来源于stack exchange,提问作者kenit23bh
相关产品推荐
相关产品推荐

