PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

strftime w sqlite przekonwertuj na postgres

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd składni PostgreSQL w sparametryzowanym zapytaniu w dniu $1

  2. Tabela w pamięci w PostgreSQL

  3. postgres generuje tablicę za pomocą okna slajdów

  4. Tworzenie konfiguracji replikacji PostgreSQL na Debianie / Ubuntu

  5. Hibernate Distinct z zamówieniem według