sql >> Database teknologi >  >> RDS >> SQLite

Sådan tilføjes en måned til en dato i SQLite

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.


  1. Hvordan kan jeg sammenligne store og små bogstaver i SQL-strenge på MySQL?

  2. Hvorfor er logiske læsninger for aggregerede vinduesfunktioner så høje?

  3. Brug af union og orden efter klausul i mysql

  4. PyMySQL kan ikke oprette forbindelse til MySQL på localhost