我需要选择一个 ISO 8601 日期。
DATE_FORMAT(date, '%Y-%m-%dT%TZ')
这会产生类似
2013-11-13T15:47:530Z
但我需要它的偏移量而不是 Z 值:
2013-11-13T15:47:53+02:00
我怎样才能用普通的 MySQL 做到这一点?
您需要将时区存储为数据库中的额外列。我不知道任何存储带有时区/偏移量的日期时间的数据库。
或者将日期存储为带有偏移量的 ISO 8601 格式的字符串。
编辑:我的立场有所纠正,使用一些较新的数据库是可能的!
似乎实际上有点标准SQL99。
不适用于Mysql。5.6 版。
我确实感到安慰,因为更正来自我自己 ;-)
他的片段应该适用于没有 milis 的 iso 8601,zulu 时间也不支持:
select IF(
LENGTH(value) < 23,
STR_TO_DATE(value,'%Y-%m-%dT%TZ'),
CASE SUBSTRING(value from 20 for 1)
WHEN '+' THEN
DATE_ADD(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR)
WHEN '-' THEN
DATE_SUB(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR
)
END
)
from THE_NAMESPACE.THE_TABLE.THE_COLUMN as value;