Ce face strftime
strftime primește un șablon de format și o valoare de timp (aceleași valori și modificatori ca la date()). În șablon, fiecare cod care începe cu % este înlocuit cu o parte a datei, iar restul textului rămâne neschimbat. Rezultatul este întotdeauna text, chiar și pentru %Y sau %s.
Codurile clasice, disponibile în orice SQLite 3: %Y, %m, %d, %H, %M, %S, %f, %j (ziua din an, 001–366), %W (săptămâna din an, săptămânile încep luni), %w (ziua săptămânii, 0 = duminică), %s (secunde de la 1970) și %%. SQLite 3.44.0 a adăugat %F (%Y-%m-%d), %T (%H:%M:%S), %u (1 = luni … 7 = duminică) și altele, iar 3.46.0 săptămâna ISO %V și %G.
SQLite nu știe numele lunilor sau ale zilelor în română (și nici în engleză: nu există %B sau %A). Pentru nume, folosește CASE pe %m sau %w, ori formatează data în aplicație.
Parametri
| Parametru | Descriere |
|---|---|
format |
Șablonul, cu coduri %. |
valoare_timp |
Data de formatat: text ISO 8601, zi iuliană, timestamp cu 'unixepoch' sau 'now'. |
Ce returnează
Text formatat; NULL dacă valoarea de timp nu este validă.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE plati (
id INTEGER PRIMARY KEY,
data TEXT NOT NULL, -- 'AAAA-LL-ZZ HH:MM:SS'
suma INTEGER NOT NULL
);
INSERT INTO plati (data, suma) VALUES
('2026-08-14 10:20:00', 150),
('2026-09-03 18:05:00', 90),
('2026-09-28 08:45:00', 210),
('2026-10-01 12:00:00', 75),
('2026-10-25 21:30:00', 120);
Exemplul 1: Format românesc pentru afișare
Datele rămân în tabel în format ISO, iar strftime le arată ca zi.lună.an. %j și %W dau ziua și săptămâna din an.
SELECT data,
strftime('%d.%m.%Y %H:%M', data) AS afisare,
strftime('%j', data) AS zi_din_an,
strftime('%W', data) AS saptamana
FROM plati
ORDER BY data;
Rezultat
╭─────────────────────┬──────────────────┬───────────┬───────────╮
│ data │ afisare │ zi_din_an │ saptamana │
╞═════════════════════╪══════════════════╪═══════════╪═══════════╡
│ 2026-08-14 10:20:00 │ 14.08.2026 10:20 │ 226 │ 32 │
│ 2026-09-03 18:05:00 │ 03.09.2026 18:05 │ 246 │ 35 │
│ 2026-09-28 08:45:00 │ 28.09.2026 08:45 │ 271 │ 39 │
│ 2026-10-01 12:00:00 │ 01.10.2026 12:00 │ 274 │ 39 │
│ 2026-10-25 21:30:00 │ 25.10.2026 21:30 │ 298 │ 42 │
╰─────────────────────┴──────────────────┴───────────┴───────────╯
Exemplul 2: Totaluri pe lună
strftime('%Y-%m', data) taie data la nivel de lună, deci toate plățile din aceeași lună intră în același grup.
SELECT strftime('%Y-%m', data) AS luna,
COUNT(*) AS plati,
SUM(suma) AS total_lei
FROM plati
GROUP BY luna
ORDER BY luna;
Rezultat
╭─────────┬───────┬───────────╮
│ luna │ plati │ total_lei │
╞═════════╪═══════╪═══════════╡
│ 2026-08 │ 1 │ 150 │
│ 2026-09 │ 2 │ 300 │
│ 2026-10 │ 2 │ 195 │
╰─────────┴───────┴───────────╯
Exemplul 3: Numele zilei în română
%w dă ziua săptămânii ca text, de la '0' (duminică) la '6' (sâmbătă). CASE o transformă în nume. Comparăm cu texte ('0'), pentru că strftime întoarce text.
SELECT data,
CASE strftime('%w', data)
WHEN '0' THEN 'duminică' WHEN '1' THEN 'luni' WHEN '2' THEN 'marți'
WHEN '3' THEN 'miercuri' WHEN '4' THEN 'joi' WHEN '5' THEN 'vineri'
ELSE 'sâmbătă'
END AS zi
FROM plati
ORDER BY data;
Rezultat
╭─────────────────────┬──────────╮
│ data │ zi │
╞═════════════════════╪══════════╡
│ 2026-08-14 10:20:00 │ vineri │
│ 2026-09-03 18:05:00 │ joi │
│ 2026-09-28 08:45:00 │ luni │
│ 2026-10-01 12:00:00 │ joi │
│ 2026-10-25 21:30:00 │ duminică │
╰─────────────────────┴──────────╯
Greșeli frecvente
- Compari rezultatul cu un număr:
WHERE strftime('%m', data) = 10nu găsește nimic, pentru căstrftimeîntoarce textul'10'. Compară cu'10'sau foloseșteCAST(strftime('%m', data) AS INTEGER). - Folosești
%B,%Asau%epe un SQLite vechi.%Bși%Anu există deloc, iar%e,%F,%T,%uexistă doar din 3.44.0. - Filtrezi pe un interval cu
strftimeaplicat coloanei:WHERE strftime('%Y-%m', data) = '2026-10'nu poate folosi indexul pedata. ScrieWHERE data >= '2026-10-01' AND data < '2026-11-01'.
Comenzi înrudite
date, time, datetime: Transformă și calculează date: extrage ziua sau ora, adună zile și luni, găsește începutul lunii sau lunea următoare.unixepoch, julianday, timediff: Transformă datele în numere (timestamp Unix sau zi iuliană) ca să calculezi diferențe în secunde, ore sau zile.WITH RECURSIVE: Un CTE care se folosește pe el însuși: generează serii de numere sau de date și parcurge ierarhii (șef–subordonat, categorii).