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.