首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQLite中将‘7-4月11日’转换为DD-MM-YYYY

在SQLite中将‘7-4月11日’转换为DD-MM-YYYY
EN

Stack Overflow用户
提问于 2013-10-09 22:14:33
回答 3查看 1K关注 0票数 0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-10 08:33:28

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

代码语言:javascript
复制
replace(
  replace(
    replace(
      original_value,
      'Jan',
      '01'
    ),
    'Feb',
    '02'
  ),
  'Mar',
  '03'
)

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

可能不会有最好的表现,但一次(?)数据转换--也许是可以的。

票数 2
EN

Stack Overflow用户

发布于 2013-10-09 22:59:31

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

票数 0
EN

Stack Overflow用户

发布于 2013-10-10 08:38:06

您需要手动解析日期。

在一个查询中:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19283759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档