我在表格的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
到位了吗?
答案 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>