我需要选择一个 ISO 8601 格式的日期。
DATE_FORMAT(date, '%Y-%m-%dT%TZ')
这将产生类似于的内容
2013-11-13T15:47:530Z
但我需要的是具有偏移量而不是Z值:
2013-11-13T15:47:53+02:00
我该如何使用纯MySQL实现这个功能?
似乎实际上是相当标准的 SQL99。
不适用于Mysql。版本 5.6。
这个片段适用于没有毫秒的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;
datetimeoffset
类型,但是您可以存储两个列 - 一个datetime
用于主要部分和一个time
类型用于偏移量。但像Jon所说的那样,将其转换为UTC并存储单个datetime
值可能更容易。除非您有特定需要保留偏移量,否则通常不需要。 - Matt Johnson-Pint