sql >> Databasteknik >  >> RDS >> PostgreSQL

strftime i sqlite konvertera till postgres

Denna SQLite:

date(date, '-' || strftime('%w', date) || ' days')

Är, AFAIK, att subtrahera antalet dagar i veckan (dvs. 0 för söndag, 1 för måndag, ...) från datum och sedan konvertera resultatet tillbaka till ett datum; se referens för datumfunktion för detaljer.

Jag tror att motsvarigheten till PostgreSQL skulle vara:

d - extract(dow from d)::int

där d är din dejt; subtrahera ett heltal från ett datum subtraherar det antalet dagar. Om d är en tidsstämpel, då kan du behöva lägga till lite casting. Det finns date_trunc('vecka) ', 'd') likaså, men det börjar räkna dagarna från och med måndag så du skulle vara ledig en gång med det.

Här är en snabb uppdelning av SQLite med date variabel ersatt av d för att undvika förväxling med date() funktion:

date(d, '-' || strftime('%w', d) || ' days')

Först av allt, || är standardoperatorn för SQL-strängsammansättning. strftime funktion är en allmän datum- och tidsformaterare som kommer från POSIX ; %w formatspecifikation betyder "veckodag som ett tal med söndag som dag noll"; så strftime call ger dig 0 för söndag, 1 för måndag och så vidare upp till 6 för lördag. Om d är en tisdag, sedan strftime samtalet ger 2 och det hela slutar som:

date(d, '-2 days')

Modifierarna för SQLite datum funktion har olika former men '-2 dagar' betyder precis vad du skulle tro:subtrahera två dagar från d . Det övergripande resultatet är att du får d trunkerad till veckan (där söndag anses vara den första dagen i veckan).

På PostgreSQL-sidan:

d - extract(dow from d)::int

vi kan börja med extract ; extrahera används för att extrahera specifika delar av ett datum eller en tid och dow betyder "veckodag som ett tal med söndag som dag noll". Låter bekant? Sedan ::int kastar DOW-talet till ett heltal och behövs eftersom DOW faktiskt kommer ut som ett dubbelt precisionsvärde och det finns ingen operator definierad för att subtrahera en dubbel från ett datum i PostgreSQL; casten kan också skrivas i standardformen som cast(x som int) . När du subtraherar ett heltal från ett datum i PostgreSQL, subtraherar du så många dagar; du kan vara mer tydlig genom att säga saker som - interval '3 days' men det skulle bara lägga till mer brus i det här fallet så jag valde för enkelhet. Om det är tisdag ser vår PostgreSQL-version ut så här:

d - 2

och det är samma sak som:

d - interval '2 days'

Och efter subtraktionen skulle vi vara tillbaka på söndag. Det finns också date_trunc i PostgreSQL men det skulle trunkeras till måndag inte söndag.



  1. Fråga för att beräkna summan av avstånd (longitud, latitud) i på varandra följande rader i Mysql

  2. Behöver hjälp med att skapa struktur till databasen

  3. Byt ut eller ta bort flera textrader i Oracles lagrade procedur

  4. Hur kan jag gruppera barn och föräldrar i en enda fråga?