【问题标题】:Reformat dates in column重新格式化列中的日期
【发布时间】:2016-12-05 22:38:15
【问题描述】:

我在 SQLite DB 中有一些数据,格式如下:

id  column1  date
111 280 1/1/2014
114 275 1/2/2014

日期字段的类型为 TEXT。我已经知道 (https://www.sqlite.org/lang_datefunc.html) 我应该将日期格式化为 YYYY-MM-DD 以利用 SQLite 的日期时间功能。有没有我可以运行的查询来更改格式

mm/dd/yyyy 

YYYY-MM-DD 

到位了吗?

【问题讨论】:

  • 如果您使用 Python,那么使用 sqlite3 模块似乎是可能的。我说“似乎是”是因为我自己没有尝试过。

标签: sqlite date


【解决方案1】:

您当前的日期格式有四种可能的形式:

m/d/yyyy
m/dd/yyyy
mm/d/yyyy
mm/dd/yyyy

要重新排列字段,请使用substr() 提取它们,然后再次组合它们。

也许可以使用instr() 来确定斜线的位置,但对于一次性转换,只使用四个查询更简单:

UPDATE MyTable
SET date = substr(date, 6, 4) || '-' ||
           substr(date, 1, 2) || '-' || '0' ||
           substr(date, 4, 1)
WHERE date LIKE '__/_/____';

-- this is mm/d/yyyy; similarly for the other forms, modify positions and zeros

【讨论】:

    【解决方案2】:

    没有任何多余的东西,例如异常处理!

    这种方法稍微简单一些,因为 strptime 不介意在几天和几个月内是否存在前导零。

    >>> from datetime import datetime
    >>> import sqlite3
    >>> con = sqlite3.connect(':memory:')
    >>> cur = con.cursor()
    >>> cur.execute('CREATE TABLE EXAMPLE (date_column text)')
    <sqlite3.Cursor object at 0x00000000038D07A0>
    >>> cur.execute('INSERT INTO EXAMPLE VALUES ("1/1/2014")')
    <sqlite3.Cursor object at 0x00000000038D07A0>
    >>> def transformDate(aDate):
    ...     tempDate = datetime.strptime(aDate, '%d/%m/%Y')
    ...     return tempDate.strftime('%Y-%m-%d')
    ... 
    >>> transformDate('1/1/2014')
    '2014-01-01'
    >>> con.create_function('transformDate', 1, transformDate)
    >>> cur.execute('UPDATE EXAMPLE SET date_column = transformDate(date_column)')
    <sqlite3.Cursor object at 0x00000000038D07A0>
    

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2019-12-25
      • 1970-01-01
      • 2019-06-30
      相关资源
      最近更新 更多