Oversigt :i denne øvelse viser vi dig, hvordan du arbejder med SQLite-dato- og tidsværdierne og bruger de indbyggede datoer og klokkeslætsfunktioner til at håndtere dato- og tidsværdier.
SQLite understøtter ikke indbygget dato- og/eller tidslagringsklasse. I stedet udnytter den nogle indbyggede dato- og tidsfunktioner til at bruge andre lagerklasser såsom TEXT
, REAL
eller INTEGER
til lagring af dato- og tidsværdier.
Brug af TEXT
lagerklasse til lagring af SQLite dato og klokkeslæt
Hvis du bruger TEXT
lagerklasse for at gemme dato- og tidsværdi, skal du bruge ISO8601-strengformatet som følger:
YYYY-MM-DD HH:MM:SS.SSS
Code language: SQL (Structured Query Language) (sql)
For eksempel 2016-01-01 10:20:05.123
Først skal du oprette en ny tabel med navnet datetime_text
til demonstration.
CREATE TABLE datetime_text(
d1 text,
d2 text
);
Code language: SQL (Structured Query Language) (sql)
Prøv det
Tabellen indeholder to kolonner d1
og d2
med TEXT
datatype.
For at indsætte dato- og tidsværdier i datetime_text
tabellen, bruger du DATETIME
funktion.
For at få den aktuelle UTC-dato og -tidsværdi, sender du den nu bogstavelige streng til funktionen som følger:
SELECT datetime('now');
Code language: SQL (Structured Query Language) (sql)
Prøv det
For at få den lokale tid sender du et ekstra argument localtime
.
SELECT datetime('now','localtime');
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det andet skal du indsætte dato- og tidsværdierne i datetime_text
tabel som følger:
INSERT INTO datetime_text (d1, d2)
VALUES(datetime('now'),datetime('now', 'localtime'));
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det tredje skal du forespørge dataene fra datetime_text
tabel.
SELECT
d1,
typeof(d1),
d2,
typeof(d2)
FROM
datetime_text;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Brug af REAL
lagerklasse til at gemme SQLite-dato- og tidsværdier
Du kan bruge REAL
opbevaringsklasse for at gemme dato- og/eller tidsværdierne som julianske dagtal, hvilket er antallet af dage siden middagstid i Greenwich den 24. november 4714 f.Kr. baseret på den proleptiske gregorianske kalender.
Lad os se på et eksempel på brug af REAL storage-klassen til at gemme dato- og tidsværdier.
Først skal du oprette en ny tabel med navnet datetime_real
.
CREATE TABLE datetime_real(
d1 real
);
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det andet skal du indsætte den "aktuelle" dato- og tidsværdi i datetime_real
tabel.
INSERT INTO datetime_real (d1)
VALUES(julianday('now'));
Code language: SQL (Structured Query Language) (sql)
Prøv det
Vi brugte julianday()
funktion til at konvertere den aktuelle dato og tid til den julianske dag.
For det tredje, forespørg data fra datetime_real
tabel.
SELECT d1 FROM datetime_real;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Outputtet kan ikke læses af mennesker.
Heldigvis kan du bruge den indbyggede date()
og time()
funktioner til at formatere en dato- og tidsværdi som følger:
SELECT
date(d1),
time(d1)
FROM
datetime_real;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Ved brug af INTEGER
for at gemme SQLite-dato- og tidsværdier
Udover TEXT
og REAL
lagerklasser, kan du bruge INTEGER
lagerklasse til at gemme dato- og tidsværdier.
Vi bruger typisk INTEGER
for at gemme UNIX-tid, som er antallet af sekunder siden 1970-01-01 00:00:00 UTC
. Se følgende eksempel:
Først skal du oprette en tabel, der har én kolonne, hvis datatype er INTEGER
for at gemme dato- og tidsværdierne.
CREATE TABLE datetime_int (d1 int);
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det andet skal du indsætte den aktuelle dato- og tidsværdi i datetime_int
tabel.
INSERT INTO datetime_int (d1)
VALUES(strftime('%s','now'));
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det tredje, forespørg data fra datetime_int
tabel.
SELECT d1 FROM datetime_int;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Det er et heltal.
For at formatere resultatet kan du bruge den indbyggede datetime()
fungerer som følger:
SELECT datetime(d1,'unixepoch')
FROM datetime_int;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Ved hjælp af SQLite kan du frit vælge alle datatyper til at gemme dato- og tidsværdier og bruge den indbyggede dato- og klokkeslætfunktion til at konvertere mellem formater.
For detaljerede oplysninger om SQLites datoer og klokkeslætsfunktioner, se de indbyggede datoer og klokkeslætsfunktioner.
I denne øvelse har du lært, hvordan du bruger TEXT
, REAL
, og INTEGER
lagerklasser til at gemme dato- og tidsværdier. Derudover lærte du, hvordan du bruger de indbyggede datoer og klokkeslætsfunktioner til at konvertere de gemte dato- og klokkeslætsværdier til læsbare formater.