Ten SQLite:
date(date, '-' || strftime('%w', date) || ' days')
Czy, AFAIK, odjęcie liczby dni w tygodniu (tj. 0 dla niedzieli, 1 dla poniedziałku, ...) od data a następnie przekonwertować wynik z powrotem na datę; zobacz odniesienie do funkcji daty
po szczegóły.
Myślę, że odpowiednikiem PostgreSQL byłoby:
d - extract(dow from d)::int
gdzie d jest twoja randka; odjęcie liczby całkowitej od daty odejmuje tę liczbę dni. Jeśli d to sygnatura czasowa, może być konieczne dodanie rzutowania. Istnieje date_trunc('week ', 'd')
również, ale to zaczyna się numerować dni od poniedziałku, więc z tym wypadniesz o jeden.
Oto szybki podział SQLite z datą zmienna zastąpiona przez d aby uniknąć pomyłek z date() funkcja:
date(d, '-' || strftime('%w', d) || ' days')
Przede wszystkim || jest standardowym operatorem konkatenacji ciągów SQL. strftime funkcja
to uniwersalny program do formatowania daty i czasu, który pochodzi z POSIX
; %w specyfikator formatu oznacza „dzień tygodnia jako liczbę, przy czym niedziela jest dniem zerowym”; więc strftime call daje 0 dla niedzieli, 1 dla poniedziałku i tak dalej aż do 6 dla soboty. Jeśli d jest wtorek, to strftime wywołanie da 2, a całość zakończy się tak:
date(d, '-2 days')
Modyfikatory dla SQLite data funkcja
mają różne formy, ale '-2 dni' oznacza dokładnie to, co myślisz:odejmij dwa dni od d . Ogólny wynik jest taki, że otrzymujesz d obcięte do tygodnia (gdzie niedziela jest uważana za pierwszy dzień tygodnia).
Po stronie PostgreSQL:
d - extract(dow from d)::int
możemy zacząć od extract
; wyodrębnij służy do wyodrębniania określonych części daty lub czasu oraz dow oznacza „dzień tygodnia jako liczbę, przy czym niedziela jest dniem zerowym”. Brzmi znajomo? Następnie ::int rzutuje liczbę DOW na liczbę całkowitą i jest to potrzebne, ponieważ DOW faktycznie jest wartością podwójnej precyzji i nie ma zdefiniowanego operatora do odejmowania liczby podwójnej od daty w PostgreSQL; rzut można również zapisać w standardowej formie jako cast(x as int) . Odejmując liczbę całkowitą od daty w PostgreSQL, odejmujesz tę liczbę dni; możesz być bardziej precyzyjny, mówiąc rzeczy takie jak - interwał '3 dni' ale to tylko dodałoby więcej hałasu w tym przypadku, więc zdecydowałem się na prostotę. Jeśli jest wtorek, nasza wersja PostgreSQL wygląda tak:
d - 2
i to to samo, co:
d - interval '2 days'
A po odjęciu wrócilibyśmy w niedzielę. Jest też date_trunc
w PostgreSQL, ale skróciłoby się to do poniedziałku, a nie niedzieli.