我正在尝试将一个以3个字符存储月份的日期转换为一个可行的日期格式,比如DD-MM-YYYY。我看过strftime()函数,找不到任何可以使用这种格式的东西。
发布于 2013-10-10 08:33:28
似乎SQLite无法将这种格式作为一个日期来处理。如果您只能使用SQLite (并且不能对外部的数据进行转换,例如在脚本语言中处理数据),那么您可以使用嵌套的replace调用,类似于
replace(
replace(
replace(
original_value,
'Jan',
'01'
),
'Feb',
'02'
),
'Mar',
'03'
)等等,并最终使用子字符串功能使年份值变为四位数值。
可能不会有最好的表现,但一次(?)数据转换--也许是可以的。
发布于 2013-10-09 22:59:31
有关日期和时间格式的完整用法,请参阅文档。
发布于 2013-10-10 08:38:06
您需要手动解析日期。
在一个查询中:
SELECT CASE WHEN d<9 THEN '0'||d ELSE d END||'-'||mmt.mm||'-'||CASE WHEN yy<80 THEN 2000+yy ELSE 1900+yy END FROM (
SELECT CAST(SUBSTR(dt,1,s1-1) AS INTEGER) AS d, SUBSTR(dt,s1+1,s2-s1-1) AS mmm, CAST(SUBSTR(dt, s2+1) AS INTEGER) AS yy FROM (
SELECT dt, s1, INSTR(SUBSTR(dt,s1+1),'-') + s1 AS s2 FROM (
SELECT dt, INSTR(dt, '-') AS s1 FROM (
SELECT '7-Apr-11' AS dt -- <<< Put your date here!
)
)
)
) AS src LEFT JOIN (
SELECT '01' AS mm, 'Jan' AS mmm
UNION SELECT '02', 'Feb'
UNION SELECT '03', 'Mar'
UNION SELECT '04', 'Apr'
UNION SELECT '05', 'May'
UNION SELECT '06', 'Jun'
UNION SELECT '07', 'Jul'
UNION SELECT '08', 'Aug'
UNION SELECT '09', 'Sep'
UNION SELECT '10', 'Oct'
UNION SELECT '11', 'Nov'
UNION SELECT '12', 'Dec'
) AS mmt ON src.mmm=mmt.mmm;Y2K:这将假定year<80为20 as,否则为19 as。
https://stackoverflow.com/questions/19283759
复制相似问题