我需要选择ISO 8601日期。
DATE_FORMAT(date, '%Y-%m-%dT%TZ')
这会产生类似
的东西2013-11-13T15:47:530Z
但是我需要它而不是Z值:
2013-11-13T15:47:53+02:00
如何使用普通MySQL进行此操作?
答案 0 :(得分:3)
您需要将时区存储为DB中的额外列。我不知道任何存储日期时间 >>时区/偏移量的数据库。
或者将日期存储为ISO 8601格式的字符串,并带有偏移量..
编辑:我有些纠正,有一些较新的数据库可以!
似乎实际上有点标准SQL99。
不适用于Mysql。 5.6版。
我确实感到安慰,因为纠正来自我自己; - )
答案 1 :(得分:0)
他的片段应该适用于没有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;