0

我正在尝试将月份存储在 3 个字符中的日期转换为可行的日期格式,例如 DD-MM-YYYY。我查看了 strftime() 函数,但找不到任何可以使用这种格式的东西。

4

3 回答 3

2

看起来 SQLite 似乎无法将这种格式作为原生日期处理。如果您只能使用 SQLite(并且不能在它之外对数据进行转换,例如在处理数据的脚本语言中),那么您可以使用嵌套replace调用,例如

replace(
  replace(
    replace(
      original_value,
      'Jan',
      '01'
    ),
    'Feb',
    '02'
  ),
  'Mar',
  '03'
)

等等,并最终使用子字符串功能使年份值成为四位数。

可能不会有最好的性能,但对于一次性(?)数据转换它可能没问题。

于 2013-10-10T08:33:28.747 回答
0

有关日期和时间格式的完整用法,请查看 文档

于 2013-10-09T22:59:31.740 回答
0

您将需要手动解析日期。

在单个查询中:

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 为 20xx,否则为 19xx。

于 2013-10-10T08:38:06.860 回答