Problem:
Du vill lägga till en månad till ett givet datum i en SQLite-databas.
Exempel:
Vår databas har en tabell som heter production
med data i kolumnerna id
, product
och start_date
.
id | produkt | startdatum |
---|---|---|
1 | skrivbord | 2019-08-17 |
2 | fåtölj | 2019-07-17 |
3 | soffa | 2019-10-31 |
Produkterna har ett nytt produktionsstartdatum som är en månad senare än vad som anges ovan. Låt oss ta reda på produkternas namn och deras nya startdatum.
Här är frågan du skulle skriva:
Lösning:
SELECT product, DATE(start_date,'+1 months') AS new_start_date FROM production;
Här är resultatet av frågan:
id | produkt | nytt_startdatum |
---|---|---|
1 | skrivbord | 2019-09-17 |
2 | fåtölj | 2019-08-17 |
3 | soffa | 2019-12-01 |
Diskussion:
Använd SQLite DATE()
funktion för att lägga till en månad till ett givet datum (eller datum och tid). Argumenten som krävs inkluderar datum/datumtid som ska ändras och en eller flera modifierare med värden som anger hur många enheter som ska läggas till eller subtraheras.
Det första argumentet kan vara ett uttryck som returnerar ett datum/datumtid-värde eller en datum/datumtid-kolumn. I vårt exempel är det kolumnen start_date
.
Modifierarna anger vilken (och hur mycket) tidsenhet som ska adderas/subtraheras. I vårt exempel använder vi modifieraren "+1 månader ’. Modifieraren börjar med antingen plus eller minus, vilket indikerar addition eller subtraktion. Sedan finns det ett värde (t.ex. 1) och enheten (t.ex. månader , år , dagar , etc.) Om du skriver "-2 dagar ', subtraherar du 2 dagar från ett givet datum.
Viktigt: Vissa modifierare kräver en något annan syntax än vad som visas ovan. Till exempel "veckodag ’ modifierare kommer före värdet (dvs. DATE(start_date,'weekday 3')
). Andra modifierare har inga värden, som "början av månaden ’, som visar den första dagen i månaden för ett givet datum (d.v.s. DATE(start_date,' start of month')
). Du kan hitta exakt information om datum- och tidsmodifierare i SQLite-dokumentationen.
Vi namngav den nya kolumnen som innehåller det uppdaterade startdatumet new_start_date
. Det nya produktionsstartdatumet för skrivbordet är 2019-09-17
, en månad senare än det ursprungliga datumet 2019-08-17
. Observera att för 2019-10-31
, det nya datumet är 2019-12-01
; detta beror på att november har 30 dagar, inte 31.