在列中重新格式化日期

时间:2016-12-05 22:38:15

标签: sqlite date

我在表格的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 

到位了吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

没有任何装饰,例如异常处理!

这种方法稍微简单一些,因为 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>