Problem:
Du vil gerne tilføje en måned til en given dato i en SQLite-database.
Eksempel:
Vores database har en tabel ved navn production
med data i kolonnerne id
, product
og start_date
.
id | produkt | startdato |
---|---|---|
1 | skrivebord | 2019-08-17 |
2 | lænestol | 2019-07-17 |
3 | sofa | 2019-10-31 |
Produkterne har en ny produktionsstartdato, der er en måned senere end angivet ovenfor. Lad os få produkternes navne og deres nye startdato.
Her er den forespørgsel, du ville skrive:
Løsning:
SELECT product, DATE(start_date,'+1 months') AS new_start_date FROM production;
Her er resultatet af forespørgslen:
id | produkt | ny_startdato |
---|---|---|
1 | skrivebord | 2019-09-17 |
2 | lænestol | 2019-08-17 |
3 | sofa | 2019-12-01 |
Diskussion:
Brug SQLite DATE()
funktion til at tilføje en måned til en given dato (eller dato og klokkeslæt). De påkrævede argumenter inkluderer dato/dato/klokkeslæt, der skal ændres, og en eller flere modifikatorer med værdier, der angiver, hvor mange enheder der skal lægges til eller trækkes fra.
Det første argument kan være et udtryk, der returnerer en dato/dato/tidspunkt-værdi eller en dato/dato/klokkeslæt-kolonne. I vores eksempel er det kolonnen start_date
.
Modifikatorerne angiver hvilken (og hvor meget) tidsenhed der skal lægges til/fratrækkes. I vores eksempel bruger vi modifikationen "+1 måneder ’. Modifikatoren starter med enten plus eller minus, hvilket indikerer addition eller subtraktion. Så er der en værdi (f.eks. 1) og enheden (f.eks. måneder , år , dage osv.) Hvis du skriver "-2 dage ’, trækker du 2 dage fra en given dato.
Vigtigt: Nogle modifikatorer kræver en lidt anden syntaks end vist ovenfor. For eksempel "ugedag ’ modifikator kommer før værdien (dvs. DATE(start_date,'weekday 3')
). Andre modifikatorer har ingen værdier, såsom "start på måneden ’, som viser den første dag i måneden for en given dato (dvs. DATE(start_date,' start of month')
). Du kan finde præcise oplysninger om dato- og tidsmodifikatorer i SQLite-dokumentationen.
Vi navngav den nye kolonne, der indeholder den opdaterede startdato new_start_date
. Den nye produktionsstartdato for skrivebordet er 2019-09-17
, en måned senere end den oprindelige dato 2019-08-17
. Bemærk, at for 2019-10-31
, den nye dato er 2019-12-01
; dette skyldes, at november har 30 dage, ikke 31.