2016-12-05 4 views
1

Ich habe einige Daten in einer SQLite-DB der Form:Reformieren Daten in Spalte

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

Das Datumsfeld ist vom Typ TEXT. Ich wurde darauf hingewiesen (https://www.sqlite.org/lang_datefunc.html), dass ich die Daten wie YYYY-MM-DD formatiert haben sollte, um die Datetime-Funktionalität von SQLite zu nutzen. Gibt es eine Abfrage, die ich das Format von

laufen konnte
mm/dd/yyyy 

zu

YYYY-MM-DD 

an seinem Platz zu ändern?

+0

Wenn Sie Python tun, dann scheint dies mit dem sqlite3-Modul möglich zu sein. Ich sage 'scheinen' zu sein, weil ich es selbst nicht versucht habe. –

Antwort

2

Ihr aktuelles Datumsformat hat vier mögliche Formen:

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

die Felder neu anordnen, extrahieren sie mit substr() und sie dann wieder kombinieren.

Es könnte möglich sein, die Positionen der Schrägstriche mit instr(), aber für eine einmalige Umwandlung zu bestimmen, nur vier Abfragen mit einfacher:

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 
+0

Danke das ist es! – user61629

1

ohne Schnörkel wie Ausnahmebehandlung!

Dieser Ansatz ist etwas einfacher, weil strptime nichts über Anwesenheit oder Abwesenheit von führenden Nullen in Tagen und Monaten macht.

>>> 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> 
+0

Vielen Dank Bill! – user61629

+0

Sie sind herzlich willkommen. –