sql >> Database >  >> RDS >> PostgreSQL

strftime in sqlite converteren naar postgres

Deze SQLite:

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

Is, AFAIK, het dag-in-de-week aantal dagen (d.w.z. 0 voor zondag, 1 voor maandag, ...) aftrekken van date en vervolgens het resultaat terug converteren naar een date; zie de verwijzing naar de datumfunctie voor details.

Ik denk dat het equivalent voor PostgreSQL zou zijn:

d - extract(dow from d)::int

waar d is je date; het aftrekken van een geheel getal van een datum trekt dat aantal dagen af. Als d is een tijdstempel, dan moet u mogelijk wat casting toevoegen. Er is date_trunc('week', 'd') ook, maar dat begint de dagen vanaf maandag te nummeren, dus daarmee zou je er één naast zitten.

Hier is een kort overzicht van de SQLite met de date variabele vervangen door d om verwarring met de date() . te voorkomen functie:

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

Allereerst || is de standaard samenvoegingsoperator voor SQL-tekenreeksen. De strftime functie is een algemene datum- en tijdnotatie die afkomstig is van POSIX ; de %w formaatspecificatie betekent "dag van de week als een getal waarbij zondag dag nul is"; dus de strftime oproep geeft u 0 voor zondag, 1 voor maandag, enzovoort tot 6 voor zaterdag. Als d is een dinsdag, dan is de strftime oproep levert 2 op en het hele ding eindigt als:

date(d, '-2 days')

De modifiers voor de SQLite date functie hebben verschillende vormen, maar '-2 days' betekent precies wat je zou denken:trek twee dagen af ​​van d . Het algemene resultaat is dat u d . krijgt afgekapt tot de week (waarbij zondag wordt beschouwd als de eerste dag van de week).

Aan de PostgreSQL-kant:

d - extract(dow from d)::int

we kunnen beginnen met extract ; extract wordt gebruikt om specifieke delen van een datum of tijd te extraheren en dow betekent "dag van de week als een getal waarbij zondag dag nul is". Klinkt bekend? Dan de ::int werpt het DOW-nummer naar een geheel getal en is nodig omdat de DOW eigenlijk uitkomt als een waarde met dubbele precisie en er geen operator is gedefinieerd voor het aftrekken van een dubbel van een datum in PostgreSQL; de cast kan ook in de standaardvorm worden geschreven als cast(x as int) . Wanneer u een geheel getal aftrekt van een datum in PostgreSQL, trekt u dat aantal dagen af; je kunt explicieter zijn door dingen te zeggen als - interval '3 days' maar dat zou in dit geval alleen maar meer ruis toevoegen, dus koos ik voor eenvoud. Als het dinsdag is, ziet onze PostgreSQL-versie er als volgt uit:

d - 2

en dat is hetzelfde als:

d - interval '2 days'

En na de aftrekking zouden we zondag terug zijn. Er is ook date_trunc in PostgreSQL, maar dat zou worden afgekapt tot maandag en niet tot zondag.



  1. Een lijst met beschikbare verzamelingen retourneren in PostgreSQL

  2. Problemen bij het controleren of er een tabel bestaat of niet in de db

  3. Genereer een willekeurige string in MySQL

  4. MYSQL - Krijg alle records die meer dan 1 record hebben voor dezelfde id