Mysql iegūt pašreizējo datumu. MYSQL datuma un laika formatēšanas funkcijas

MySql ir ne tikai pievilcīga sistēma datu uzglabāšanas organizēšanai, bet arī IZCILS RĪKS informācijas apstrādei.

Šodien mēs apskatīsim darbu ar mysql funkcijām: Date, DateTime. Es arī runāšu par mysql metodēm, ko izmanto, lai pārvērstu virkni datumā. Kopumā ar datumiem saistīto problēmu risināšanai mysql DBVS ir dažādas pieejas.

Problēma.

Pieņemsim, ka jūs rakstāt sistēmu SMS paziņojumu nosūtīšanai savai klientu bāzei.
Tabula 1. tbl_clients* - tabula ar klienta datiem (pilns vārds un dzimšanas datums), dati par daudzumu, preces veidu un pieteikuma apstrādes statusu.

2. tabula. tbl_sms – SMS statusu tabula un klienta ID saistība ar statusa saņemšanas datumu.

Tuvāk cīņai. Mēs bruņojamies ar iebūvētām funkcijām.

Tabulā tbl_sms ir vairāki ieraksti vienam Id_clients ar dažādiem statusiem un saņemšanas laikiem. Piemēram:

Pieņemsim, ka priekšnieks pieprasa visu klientu jaunāko statusu sarakstu. Jūs varat ātri atrisināt problēmu, izmantojot iebūvētās funkcijas. SQL vaicājums šim gadījumam izskatās šādi:

SELECT * FROM tbl_sms ts JOIN (SELECT Id_clients, max(Date_status) as max_dat FROM tbl_sms GROUP BY Id_clients) ts_max ON ts. id_klients = ts_max. id_klienti un ts. Datuma_statuss= ts_max.max_dat ;

Vaicājuma rezultāts ir ierakstu atlase ar maksimālo datumu katram Id_clients:

Pieprasījums ir sarežģīts, es to nesapratu pirmajā reizē, bet es mēģināšu paskaidrot. Vaicājumā mēs savienojam divas tabulas. Pirmajā tbl_sms ir visi dati, neņemot vērā nosacījumus, tā teikt “neapstrādātā formā”. Otrā tabula ir vaicājuma rezultāts

SELECT Id_clients, max(Date_status) kā max_dat FROM tbl_sms GROUP BY Id_clients ;

uz to pašu tbl_sms, izmantojot funkciju MAX() un grupējot pēc lauka Id_clients.

Otrajā tabulā mēs grupējam ierakstus pēc id_klientiem, izmantojot konstrukciju “GROUP BY Id_clients”. Tas ir, tagad mums ir viens ieraksts (lai gan tabulā ir vairāki ieraksti vienai id_clients vērtībai) - šī ir viena lauka id_clients vērtība. SELECT mēs izmantojam funkciju MAX(), kuras rezultāts ir tabulas laukā ierakstītās maksimālās vērtības atlase. Uzziņai, mysql DBVS ir apgriezta funkcija MIN (). Rezultātā vaicājumā, izmantojot funkciju MAX(), mēs iegūstam maksimālo lauka Date_status vērtību katrai lauka id_clients vērtībai.
Un visbeidzot, izvēloties ierakstus, kas atbilst šādiem nosacījumiem: “ON ts. id_clients = ts_max. id_klienti un ts. Date_status= ts_max.max_dat”, mēs iegūstam vēlamo rezultātu.

Priekšnieks ir apmierināts. Bet tad atnāk grāmatvedis un izvirza jaunu uzdevumu: “Jāatlasa visi statusi, kurus saņēmām tikai par 10.05.2014.”

Mēs rakstām šādu pieprasījumu:

SELECT * FROM tbl_sms WHERE Datuma_statuss>'2014-10-05 00:00:00' Un Datuma_statuss<’2014-10-05 23:59:59’ ;

Tā kā lauka Date_status datu tips ir DATETIME, mēs uzstādām šādus nosacījumus: vērtība No 00:00 līdz 23:59 10/05/2014 – šis periods ietver tieši vienu dienu vai 24 stundas. Jums jāpievērš uzmanība datuma ierakstīšanas formai. Datuma datu tipā mysql mēs attēlojam datumu šādā formātā Gads(4)-Month(2)-Day(2). Ja lauks “statuss” būtu DATE formātā, pieprasījums izskatītos šādi:

SELECT * FROM tbl_sms WHERE Datums_statuss = "2014-10-05";

Mēs izdomājām grāmatveža uzdevumu. Pārskati ir iesniegti. Tagad aplūkosim darbu ar datumiem mysql no cita leņķa – ja datums ir attēlots kā virkne. Dažreiz tas notiek…

Datums tipā VARCHAR vai CHAR... Ko darīt? Izmantojot virknes konvertēšanas funkciju.

Pats ar līdzīgu problēmu esmu saskāries ne reizi vien. Fakts ir tāds, ka, ja jums ir datums virknes formā, visi iepriekš aprakstītie vaicājumi kļūst bezjēdzīgi. Piemēram, jums ir jāatlasa visi klienti, kuru Date_Zap lauka vērtības atrodas noteiktā datuma periodā. Neuzskaitiet visus datumus... Protams, nē. Vienmēr ir izeja, un iebūvētās funkcijas mums atkal palīdzēs. Šādam uzdevumam mysql ir funkcija STR_TO_DATE().
Kā norāda nosaukums, funkcija pārvērš virkni datumā. Funkcijas STR_TO_DATE argumenti ir datums CHAR vai VARCHAR datu tipā un datuma formāts, ko JŪS IESNIEDZAT.

Piemēram, jūs varat jautāt tabulā tbl_clients:

SELECT Date_Zap, STR_TO_DATE(Date_Zap,'%d.%m.%Y') FROM tbl_clients WHERE id_clietns='345';

Funkcijas STR_TO_DATE() izmantošanas rezultāts:

Kā redzat, no parastā datuma formāta mēs iegūstam mysql formāta datumu. Daži komentāri par pieprasījumu:

  • Ja neesat pilnībā pārliecināts par funkcijas rezultātu, vienmēr rīkojieties kā šeit, lai redzētu lauka vērtības pirms un pēc transformācijas. Tas ietaupīs nervus.
  • Ja jūs gatavojaties izmantot rezultātu, piemēram, programmā un piekļūt tam pēc lauka nosaukuma, tad iesaku aizstāt garo nosaukumu “STR_TO_DATE(Date_Zap,'%d.%m.%Y')”, piemēram, ar nosaukumu Data_Mysql, šim nolūkam mēs modificējam vaicājumu
SELECT Date_Zap, STR_TO_DATE(Date_Zap,'%d.%m.%Y') kā Data_Mysql FROM tbl_clients WHERE id_clietns='345';

Rezultāts, izmantojot funkciju, kas pārvērš virkni mysql datuma formātā (STR_TO_DATE()):

Parādiet datumu vārdos.

Bieži vien ir jāpārliecinās, ka, veidojot atskaites no datu bāzes (mysql), datumam uz dokumentiem jābūt formātā “Diena Mēnesis vārdos Gads”. Piemēram: ir "21.10.2014", bet jums ir nepieciešams "21.10.2014". Kad es saskāros ar šādu problēmu, es uzrakstīju visu apstrādi Delfos, lai ģenerētu datumu. Izrādījās, ka mysql DBVS jau ir iebūvēta funkcija datuma pārvēršanai no skaitliskā attēlojuma uz datumu vārdos. Un, kā jau teicu sākumā, mysql ir ne tikai datu uzglabāšanas pārvaldības rīks, bet arī informācijas apstrādes rīks.
Tātad datumu iepriekš aprakstītajā formātā ir viegli iegūt vienkāršā pieprasījumā:

SELECT DATE_FORMAT('2014-10-21','%d %M %Y') kā Data_Mysql; //Ņemiet vērā pareizrakstību %M

Viss būtu labi, datums ir attēlots ar vārdiem, bet mēneša nosaukums ir angļu valodā. Tas var notikt, ja serverim ir globālais mainīgais lc_time_names=en_EN. Krievu datuma vērtība būs vienāda ar: lc_time_names=ru_RU.
Šīs problēmas risināšanai ir vairākas iespējas.
Pirmā iespēja ir iestatīt noklusējuma vērtību mysql servera konfigurācijā. Lai to izdarītu, atveriet my.ini direktorijā, kurā ir instalēts mysql serveris, un sadaļā “” ievietojiet rindiņu “lc_time_names = ‘ru_RU”.
Otrā iespēja jums būs piemērota, ja nav tiešas piekļuves mysql konfigurācijai. Mainīgā vērtību var mainīt, izpildot sql vaicājumu. Pirms pieprasījuma veiciet šādas darbības: “SET lc_time_names = ‘ru_RU’;”. Ar šo komandu jūs iestatāt mainīgā lc_time_names vērtību šajā sesijā ar mysql serveri. Tas ir, ja jūs zaudējat savienojumu ar mysql serveri, atkārtoti izveidojot savienojumu, tas tiks iestatīts uz noklusējuma vērtību “en_EN”.
Tāpēc iesaku izmantot komandu tieši pirms sql vaicājuma izpildes. Šajā gadījumā galīgais vaicājums izskatīsies šādi:

SET lc_time_names = "ru_RU"; SELECT DATE_FORMAT('2014-10-21','%d %M %Y') kā 'Data_Mysql';

SQL vaicājuma rezultāts, izmantojot funkciju DATE_FORMAT():

Kā redzams, viss ir kļuvis pareizi, mēneša nosaukums kļuvis krievisks.
Tādējādi, izmantojot mysql funkcijas, ir viegli un ātri apstrādāt informāciju. Iesaku neveikt darbu, ko varat deleģēt mysql rīkiem. Tādā veidā ir jāraksta mazāk koda, un 90% gadījumu šāda sistēma darbosies stabilāk. Pārbaudīts no savas pieredzes. Es ceru, ka šis raksts jums būs noderīgs, dārgie lasītāji! Ar cieņu, jūsu Shinobi.

Tātad visi kalendāra datu veidi ir detalizēti aprakstīti sadaļā “10.3. Datuma un laika veidi » MySQL apmācības. Svarīga informācija par DBVS atbalstu laika joslām ir aprakstīta sadaļā “9.7. MySQL servera laika joslas atbalsts". Viss turpmākais ir balstīts uz rokasgrāmatas izpēti. Tajā pašā laikā šeit ir norādītas tikai izvēles nianses par labu vienam vai otram veidam, tāpēc šis materiāls nekādā veidā neaizstāj rokasgrāmatu, bet gan to papildina.

Pirmkārt, īss katra veida apraksts:

  • TIMESTAMP - datu tips datuma un laika saglabāšanai. Dati tiek saglabāti kā sekunžu skaits, kas pagājušas kopš “Unix ēras” sākuma. Vērtību diapazons: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Aizņem 4 baitus.
  • YEAR — datu tips gada glabāšanai. Vērtību diapazons: 1901–2155. Aizņem 1 baitu.
  • DATE ir datu veids datu glabāšanai. Vērtību diapazons: 1000-01-01 - 9999-12-31. Aizņem 3 baitus.
  • LAIKS ir datu veids laika glabāšanai. Vērtību diapazons: –828:59:59–828:59:59. Aizņem 3 baitus.
  • DATETIME ir datu veids datuma un laika glabāšanai. Vērtību diapazons: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Aizņem 8 baitus.
Piezīme saimniecei. Interesanti ir tas, ka lielākā daļa programmētāju uzskata, ka “laikspiedola” jēdziens ir Unix laiks. Faktiski laikspiedols ir zīme, kas ir rakstzīmju virkne, kas norāda datumu un/vai laiku, kad noticis konkrēts notikums. Un “Unix laiks” (Unix laiks) vai POSIX laiks ir sekunžu skaits, kas pagājis kopš 1970. gada 1. janvāra pusnakts pēc UTC. Laika zīmoga jēdziens ir plašāks nekā Unix laiks.

Izanalizējot iepriekš sniegto tipu aprakstu, jūs varat izdarīt gandrīz visus secinājumus par noteiktu veidu priekšrocībām un trūkumiem. Viss ir diezgan vienkārši un acīmredzami.

Bet pirms runāt par šo tipu izmantošanu, vēlos atzīmēt, ka praksē datuma un laika saglabāšanai bieži tiek izmantots cits veids: vesela skaitļa vērtība (datuma saglabāšanai - INT (4 baiti), datums un laiks - BIGINT (8). baiti)). Vienīgā atšķirība starp veselu skaitļu veidu izmantošanu un DATE un DATETIME ir tāda, ka izvades laikā dati netiek formatēti, un aprēķinos ar datumiem un laikiem veseli skaitļi ir jāpārvērš atbilstošā kalendāra veidā. Turklāt pirms saglabāšanas netiek pārbaudīts uzrādītās vērtības derīgums. Šķirošanas iespējas tiek saglabātas. Tāpēc ir lietderīgi izmantot INT un BIGINT tajos pašos gadījumos kā DATE un DATETIME, lai palielinātu pārnesamību un neatkarību no DBVS. Es neredzu citas priekšrocības, ja tādas ir, iesaku tās norādīt komentāros.

Kalendāra datu tipu izmantošana programmā MySQL

Sāksim ar vienkāršāko – tipa GADS. Tā vienīgā priekšrocība ir mazais izmērs - tikai 1 baits. Taču šī iemesla dēļ spēkā esošo vērtību diapazons ir stingri ierobežots (tips var saglabāt tikai 255 dažādas vērtības). Man ir grūti iedomāties praktisku situāciju, kurā varētu vēlēties saglabāt gadus stingri diapazonā no 1901. līdz 2155. Turklāt SMALLINT tips (2 baiti) dod diapazonu, kas vairumā gadījumu ir pietiekams, lai uzglabātu gadu. Un saglabāt 1 baitu katrā datu bāzes tabulas rindā mūsu laikā nav jēgas.

Veidi DATUMS Un DATUMS LAIKS var apvienot vienā grupā. Tie saglabā datumu vai datumu un laiku ar diezgan plašu derīgu vērtību diapazonu neatkarīgi no serverī iestatītās laika joslas. To izmantošanai noteikti ir praktiska jēga. Bet, ja vēlaties saglabāt datumus vēsturiskiem notikumiem, kas pārsniedz parasto laikmetu, jums būs jāizvēlas citi datu veidi. Šie veidi ir ideāli piemēroti noteiktu notikumu datumu glabāšanai, kas potenciāli neietilpst TIMESTAMP tipa diapazonā (dzimšanas dienas, produktu izlaišanas datumi, prezidenta vēlēšanas, kosmosa raķešu palaišana utt.). Izmantojot šos veidus, jums jāņem vērā viena svarīga nianse, bet vairāk par to tālāk.

Tips LAIKS var izmantot, lai saglabātu laika periodu, kurā nav nepieciešama precizitāte, kas mazāka par 1 sekundi, un laika periodus, kas ir mazāki par 829 stundām. Te vairs nav ko piebilst.

Interesantākais veids paliek - LAIKZĪMOGS. Tas jāņem vērā salīdzinājumā ar DATE un DATETIME: TIMESTAMP ir paredzēts arī noteiktu notikumu datuma un/vai laika glabāšanai. Būtiska atšķirība starp tām ir vērtību diapazonos: acīmredzot, TIMESTAMP nav piemērots vēsturisku notikumu (pat tādu kā dzimšanas dienu) glabāšanai, bet lieliski piemērots aktuālo (reģistrācija, rakstu ievietošanas datumi, produktu pievienošana, pasūtījumu veikšana) un gaidāmie notikumi paredzamā nākotnē (jaunu versiju izlaidumi, kalendāri un plānotāji utt.).

Galvenā TIMESTAMP veida izmantošanas ērtība ir tāda, ka šāda veida kolonnām tabulās var iestatīt noklusējuma vērtību pašreizējā laika aizstāšanas veidā, kā arī iestatīt pašreizējo laiku, atjauninot ierakstu. Ja jums ir nepieciešamas šīs funkcijas, pastāv 99% iespēja, ka TIMESTAMP ir tieši tas, kas jums nepieciešams. (Skatiet rokasgrāmatu, lai uzzinātu, kā to izdarīt.)

Nebaidieties, ka jūsu programmatūra pārtrauks darboties, tuvojoties 2038. gadam. Pirmkārt, pirms šī laika jūsu programmatūra, visticamāk, vienkārši tiks pārtraukta (it īpaši tās versijas, kuras tiek rakstītas tagad). Otrkārt, tuvojoties šim datumam, MySQL izstrādātāji noteikti nāks klajā ar kaut ko, lai saglabātu jūsu programmatūras funkcionalitāti. Viss tiks atrisināts, tāpat kā Y2K problēma.

Tātad, mēs izmantojam veidu TIMESTAMP, lai saglabātu mūsu laika notikumu datumus un laikus, un DATETIME un DATE, lai saglabātu vēsturisku notikumu vai dziļas nākotnes notikumu datumus un laikus.

Vērtību diapazoni ir būtiska atšķirība starp veidiem TIMESTAMP, DATETIME un DATE, taču tie nav galvenā atšķirība. Galvenā ka TIMESTAMP saglabā vērtību UTC. Saglabājot vērtību, tā tiek pārtulkota no pašreizējās laika joslas uz UTC, un, lasot to, tā tiek tulkota no pašreizējās laika joslas no UTC. DATETIME un DATE vienmēr saglabā un parāda vienu un to pašu laiku neatkarīgi no laika joslām.

Laika joslas tiek iestatītas globāli MySQL DBVS vai pašreizējam savienojumam Pēdējo var izmantot, lai nodrošinātu dažādu lietotāju darbu dažādās laika zonās DBVS līmenī. Visas laika vērtības tiks fiziski saglabātas UTC un saņemtas no klienta un nodotas klientam - viņa laika joslas vērtībās. Bet tikai tad, ja tiek izmantots datu veids TIMESTAMP. DATE un DATETIME vienmēr saņem, saglabā un atgriež vienu un to pašu vērtību.

Funkcija NOW() un tās sinonīmi atgriež laika vērtību lietotāja pašreizējā laika joslā.

Ņemot vērā visus šos apstākļus, jums jābūt īpaši uzmanīgiem, mainot laika joslu savienojumā ar serveri un izmantojot veidus DATE un DATETIME. Ja nepieciešams saglabāt datumu (piemēram, dzimšanas datumu), tad problēmu nebūs. Dzimšanas datums ir vienāds jebkurā zonā. Tie. ja esat dzimis 1. janvārī plkst. 0:00 UTC/GMT+0, tad šis Nav nozīmē, ka Amerikā viņi svinēs tavu dzimšanas dienu 31. decembrī. Bet, ja jūs nolemjat uzglabāt laiks notikumi kolonnā DATETIME, tad vienkārši nebūs iespējams strādāt ar lietotāja laika joslām DBVS līmenī. Ļaujiet man paskaidrot ar piemēru:

Lietotājs X strādā UTC/GMT+2 zonā, Y - UTC/GMT+3 zonā. Lietotāju savienojumiem ar MySQL tiek iestatīta atbilstoša (katrai sava) laika josla. Lietotājs ievieto ziņojumu forumā, mēs esam ieinteresēti ziņojuma rakstīšanas datumā.

1. iespēja: DATETIME. Lietotājs X raksta ziņojumu plkst. 14:00 UTC/GMT+2. Vērtība ziņojuma laukā “datums” tiek aizstāta funkcijas NOW() izpildes rezultātā - 14:00. Lietotājs Y nolasa ziņojuma rakstīšanas laiku un redz to pašu 14:00. Bet viņa iestatījumi ir iestatīti uz UTC/GMT+3, un viņš domā, ka ziņa tika uzrakstīta ne tikai tagad, bet pirms stundas.

2. iespēja: TIMESTAMP. Lietotājs X raksta ziņojumu plkst. 14:00 UTC/GMT+2. Laukā “datums” ir norādīts funkcijas NOW() izpildes rezultāts - šajā gadījumā - 12:00 UTC/GMT+0. LietotājsY nolasa ziņojuma rakstīšanas laiku un saņem (UTC/GMT+3) (12:00 UTC/GMT+0) = 15:00 UTC/GMT+3. Viss izdodas tieši tā, kā mēs vēlamies. Un pats galvenais, tas ir ļoti ērti lietojams: lai atbalstītu pielāgotas laika joslas, jums nav jāraksta laika konvertēšanas kods.

Iespējas aizvietot pašreizējo laiku un strādāt ar laika joslām TIMESTAMP tipā ir tik jaudīgas, ka, ja nepieciešams saglabāt datumu bez laika noteiktā žurnālā, tomēr DATE vietā jāizmanto TIMESTAMP, nesaglabājot 1 baitu no starpības. starp viņiem. Šajā gadījumā vienkārši ignorējiet “00:00:00”.

Ja nevarat izmantot TIMESTAMP, jo tā vērtību diapazons ir salīdzinoši neliels (parasti 1-2 gadījumi pret 10-15 vietņu datu bāzē), jums būs jāizmanto DATETIME un rūpīgi jāpielāgo tā vērtības pareizajās vietās ( t.i., rakstot šajā laukā, konvertējiet datumu uz UTC, bet lasot – uz laiku lasīšanas lietotāja zonā). Ja saglabājat tikai datumu, visticamāk, nav nozīmes tam, kura laika josla jums ir: visi Jauno gadu svin 1. janvārī pēc vietējā laika, tāpēc jums šeit nekas nav jātulko.

Vērtības šādos formātos:

    Kā virkni formātā "GGGG-MM-DD" vai "GGG-MM-DD" . Ir atļauta atvieglota sintakse: jebkuru pieturzīmi var izmantot kā datuma daļu atdalītāju. Piemēram, "2012-12-31" , "2012/12/31" , "2012^12^31" un "2012@12@31" ir līdzvērtīgi.

    Kā virkni bez norobežotājiem formātā "GGGGMMDD" vai "GGMMDD" ar nosacījumu, ka virknei ir nozīme kā datumam. Piemēram, "20070523" un "070523" tiek interpretēti kā "2007-05-23", bet "071332" ir nelikumīgs (tam ir bezjēdzīgas mēneša un dienas daļas) un kļūst par "0000-00-00".

    Kā skaitlis formātā GGGGMMDD vai GGMMDD , ja vien skaitlim ir nozīme kā datumam. Piemēram, 19830905 un 830905 tiek interpretēti kā "1983-09-05" .

Tāpēc virkne "08/25/2012" nav derīgs MySQL datuma literāls. Jums ir četras iespējas (kaut kādā neskaidrā preferenču secībā, bez papildu informācijas par jūsu prasībām):

    Konfigurējiet datumu atlasītāju, lai nodrošinātu datumus atbalstītā formātā, izmantojot altField kopā ar altFormat :

    $("selector").datepicker(( altField: "#actualDate" altFormāts: "gggg-mm-dd" ));

    Vai arī, ja esat apmierināts, ka lietotāji redz datumu GGGG-MM-DD formātā, tā vietā vienkārši iestatiet parametru dateFormat:

    $("selector").datepicker(( dateFormat: "gggg-mm-dd" ));

  • $dt = \DateTime::createFromFormat("m/d/G", $_POST["datums"]);

    un tad vai nu:

      iegūstiet piemērotu formatētu virkni:

      $datums = $dt->formāts("Y-m-d");

      iegūt UNIX laikspiedolu:

      $timestamp = $dt->getTimestamp();

      kas pēc tam tiek nodota tieši MySQL FROM_UNIXTIME() :

      INSERT INTO user_date VALUES ("", "$name", FROM_UNIXTIME($timestamp))

  • Manuāli ievadiet virkni derīgā literālā:

    $detaļas = eksplode ("/", $_POST["datums"]); $date = "$detaļas-$detaļas-$detaļas";

Brīdinājums

    Jūsu kods ir neaizsargāts pret SQL injekciju. Jums tiešām vajadzētu izmantot sagatavotus paziņojumus, kur jūs nododat savus mainīgos kā parametrus, kas netiek novērtēti SQL. Ja nezināt, par ko es runāju vai kā to labot, izlasiet Bobija Tablesa stāstu.

  • DATE tips tiek izmantots vērtībām ar datuma daļu, bet bez laika daļas. MySQL izgūst un parāda DATE vērtības formātā "GGGG-MM-DD". Atbalstītais diapazons ir no "1000-01-01" līdz "9999-12-31".

    Datuma un laika tips tiek izmantots vērtībām, kurās ir gan datums, gan laiks. MySQL izgūst un parāda DateTime vērtības formātā "GGGG-MM-DD HH:MM:SS" . Atbalstītais diapazons ir no "1000-01-01 00:00:00" līdz "9999-12-31 23:59:59".

Zemāk ir piemērs, kurā tiek izmantotas datuma funkcijas. Šis vaicājums atlasa visus ierakstus ar date_col vērtību pēdējo 30 dienu laikā:

Mysql> ATLASĪT kaut ko NO tbl_nosaukums WHERE TO_DAYS(NOW()) - TO_DAYS(date_col)<= 30;

Atgriež nedēļas dienas indeksu datumam (0 = pirmdiena, 1 = otrdiena, ... 6 = svētdiena):

Mysql> SELECT WEEKDAY("1998-02-03 22:23:00"); -> 1 mysql> SELECT WEEKDAY("1997-11-05"); -> 2

MĒNEŠA DIENA(datums)

Atgriež datuma argumenta mēneša dienas kārtas numuru diapazonā no 1 līdz 31:

Mysql> SELECT DAYOFMONTH("1998-02-03"); -> 3

Atgriež datuma argumenta gada dienas kārtas numuru diapazonā no 1 līdz 366:

Mysql> SELECT DAYOFYEAR("1998-02-03"); -> 34

Atgriež gada mēneša sērijas numuru datuma argumentam, sākot no 1 līdz 12:

Mysql> SELECT MONTH("1998-02-03"); -> 2

Atgriež nedēļas dienas nosaukumu datuma argumentam:

Mysql> SELECT DAYNAME("1998-02-05"); -> "ceturtdiena"

Atgriež datuma argumenta mēneša nosaukumu:

Mysql> SELECT MONTHNAME("1998-02-05"); -> "februāris"

Atgriež gada ceturkšņa skaitli datuma argumentam, sākot no 1 līdz 4:

Mysql> SELECT QUARTER("98-04-01"); -> 2

WEEK(datums) , WEEK(datums,pirmais)

Ņemot vērā vienu argumentu, atgriež nedēļas kārtas numuru gadā datumam, sākot no 0 līdz 53 (jā, iespējams, 53. nedēļas sākums) reģionos, kur svētdiena tiek uzskatīta par nedēļas pirmo dienu. Forma WEEK() ar diviem argumentiem ļauj norādīt, vai nedēļa sākas svētdienā vai pirmdienā. Rezultāts būs diapazonā no 0-53 vai 1-52.

Lūk, kā darbojas otrais arguments:

Mysql> SELECT WEEK("1998-02-20"); -> 7 mysql> SELECT WEEK("1998-02-20",0); -> 7 mysql> SELECT WEEK("1998-02-20",1); -> 8 mysql> SELECT WEEK("1998-12-31",1); -> 53

Piezīme. Versijā 4.0 funkcija WEEK(#,0) tika mainīta, lai tā atbilstu ASV kalendāram.

Ņemiet vērā: ja nedēļa ir iepriekšējā gada pēdējā nedēļa, MySQL atgriezīs 0, ja vien nenorādīsiet 2 vai 3 kā izvēles argumentu:

Mysql> SELECT YEAR("2000-01-01"), WEEK("2000-01-01",0); -> 2000, 0 mysql> SELECT WEEK("2000-01-01",2); -> 52

Var pieņemt, ka MySQL ir jāatgriež 52, jo šis datums ir 1999. gada 52. nedēļa. Mēs nolēmām atgriezt 0, jo vēlamies, lai funkcija sniegtu "nedēļas numuru norādītajā gadā". Tas padara WEEK() funkciju uzticamāku, ja to izmanto kopā ar citām funkcijām, kas aprēķina datuma daļas.

Ja jums joprojām ir svarīga pareizā gada nedēļa, varat izmantot 2 vai 3 kā neobligātu argumentu vai izmantot YEARWEEK()

Mysql> SELECT YEARWEEK("2000-01-01"); -> 199952 mysql> SELECT MID(YEARWEEK("2000-01-01"),5,2); -> 52

Atgriež gadu datumam diapazonā no 1000 līdz 9999:

Mysql> SELECT YEAR("98-02-03"); -> 1998. gads

YEARWEEK(datums) , YEARWEEK(datums,pirmais)

Datuma argumentam atgriež gadu un nedēļu. Šīs funkcijas otrais arguments darbojas līdzīgi kā otrais funkcijas WEEK() arguments. Ņemiet vērā, ka gads var atšķirties no datuma, kas norādīts gada pirmajā un pēdējā nedēļā:

Mysql> SELECT YEARWEEK("1987-01-01"); -> 198653

Ņemiet vērā, ka nedēļas numurs atšķiras no tā, ko WEEK() (0) atgriež, kad tiek izsaukts ar izvēles argumentu 0 vai 1 . Tas ir tāpēc, ka WEEK() atgriež nedēļas numuru norādītajā gadā.

Atgriež laika argumenta stundu diapazonā no 0 līdz 23:

Mysql> SELECT HOUR("10:05:03"); -> 10

Atgriež laika argumenta minūšu skaitu diapazonā no 0 līdz 59:

Mysql> SELECT MINUTE("98-02-03 10:05:03"); -> 5

Atgriež laika argumenta sekunžu skaitu no 0 līdz 59:

Mysql> SELECT SECOND("10:05:03"); -> 3

Pievieno N mēnešus periodam P (GGMM vai GGGGMM formātā). Atgriež vērtību GGGGMM formātā. Ņemiet vērā, ka perioda arguments P nav datuma vērtība:

Mysql> SELECT PERIOD_ADD(9801,2); -> 199803

PERIOD_DIFF(P1,P2)

Atgriež mēnešu skaitu starp periodiem P1 un P2. P1 un P2 ir jābūt GGMM vai GGGMM formātā. Ņemiet vērā, ka perioda argumenti P1 un P2 nav datuma vērtības:

Mysql> SELECT PERIOD_DIFF(9802,199703); -> 11

DATE_ADD(datums,INTERVAL derīguma veids) , DATE_SUB(datums,INTERVAL derīguma veids) , ADDDATE(datums,INTERVAL derīguma veids) , SUBDATE(datums,INTERVAL derīguma veids)

Šīs funkcijas veic aritmētiskās darbības ar datumiem. Abi ir jauni MySQL 3.22. Funkcijas ADDDATE() un SUBDATE() ir sinonīmi DATE_ADD() un DATE_SUB() . Programmā MySQL 3.23 funkciju DATE_ADD() un DATE_SUB() vietā varat izmantot operatorus + un -, ja labās puses izteiksme ir DATE vai DATETIME tipa kolonna (skatiet piemēru tālāk). Datuma arguments ir DATETIME vai DATE vērtība, kas norāda sākuma datumu.

Izteiksme izteiksme norāda intervāla apjomu, kas jāpievieno sākuma datumam vai jāatņem no tā. Izteiksme ir virkne, kas var sākties ar - negatīvām intervāla vērtībām. Tipa atslēgvārds norāda, kā dotā izteiksme jāinterpretē. Palīdzības funkcija EXTRACT (tips no datuma) atgriež noteiktā tipa (tipa) intervālu no datuma vērtības. Šajā tabulā parādīta saistība starp tipa un izteiksmes argumentiem:

Nozīme Tips Paredzamais formāts ekspr
OTRĀ SEKUNDES
MINŪTE MINŪTES
STUNDA STUNDAS
DIENA DIENAS
MĒNESIS MĒNEŠI
GADS GADI
MINUTE_SECOND "MINUTES:SECONDS"
HOUR_MINUTE "HOURS:MINUTES"
DAY_HOUR "DIENAS STUNDAS"
YEAR_MONTH "GADI-MĒNEŠI"
HOUR_SECOND "HOURS:MINUTES:SECONDS"
DAY_MINUTE "DAYS HOURS:MINUTES"
DAY_SECOND "DAYS HOURS:MINUTES:SECONDS"

Programmā MySQL izteiksmes izteiksmes formāts pieļauj jebkādus atdalītājus. Šajā tabulā norādītie norobežotāji ir sniegti kā piemēri. Ja datums ir DATE vērtība un paredzētais aprēķins ietver tikai daļas YEAR , MONTH un DAY (tas ir, nav TIME daļas), rezultāts tiek attēlots ar DATE vērtību. Citos gadījumos rezultāts ir DATETIME vērtība:

Mysql> SELECT "1997-12-31 23:59:59" + INTERVĀLS 1 SEKUNDE; -> 1998-01-01 00:00:00 mysql> ATLASĪT INTERVĀLU 1 DIENA + "1997-12-31"; -> 1998-01-01 mysql> ATLASĪT "1998-01-01" - INTERVĀLS 1 SEKUNDE; -> 1997-12-31 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVĀLS 1 sekunde); -> 1998-01-01 00:00:00 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVĀLS 1 DIENA); -> 1998-01-01 23:59:59 mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 mysql> SELECT DATE_SUB("1998-01-02", INTERVALS 31 DAY); -> 1997-12-02

Ja norādītais intervāls ir pārāk īss (tas ir, neietver visas intervāla daļas, ko sagaida norādītā tipa atslēgvārds), tad MySQL pieņem, ka intervāla galējās kreisās daļas tiek izlaistas. Piemēram, ja tipa arguments ir DAY_SECOND , tad paredzamajā izteiksmes izteiksmē ir jābūt šādām daļām: dienas, stundas, minūtes un sekundes. Ja šajā gadījumā norādāt intervāla vērtību kā "1:10", MySQL pieņem, ka dienas un stundas ir izlaistas un ka vērtība ietver tikai minūtes un sekundes. Citiem vārdiem sakot, kombinācija "1:10" DAY_SECOND tiek interpretēta kā ekvivalenta "1:10" MINUTE_SECOND. MySQL interpretē TIME vērtības līdzīgā veidā - kā attēlojot pagājušo laiku, nevis diennakts laiku. Lūdzu, ņemiet vērā, ka, pievienojot vai atņemot darbības, kas ietver DATE vērtību un izteiksmi, kas satur laika daļu, šī DATE vērtība tiks automātiski pārveidota par DATETIME tipa vērtību:

Mysql> SELECT DATE_ADD("1999-01-01", INTERVĀLS 1 DIENA); -> 1999-01-02 mysql> SELECT DATE_ADD("1999-01-01", INTERVĀLS 1 STUNDA); -> 1999-01-01 01:00:00

Ja izmantojat nepareizas datuma vērtības, rezultāts būs NULL. Ja, summējot MONTH , YEAR_MONTH vai YEAR, dienas skaitlis iegūtajā datumā pārsniedz maksimālo dienu skaitu jaunajā mēnesī, tad iegūtā datuma dienas numurs tiek iestatīts uz jaunā mēneša pēdējo dienu:

Mysql> SELECT DATE_ADD("1998-01-30", INTERVĀLS 1 MONTH); -> 1998-02-28

Iepriekšējā piemērā var redzēt, ka vārds INTERVAL un tipa atslēgvārds nav reģistrjutīgi.

IZRAKSTS (rakstiet NO datuma)

Funkcija EXTRACT() izmanto tādus pašus intervālu tipus kā funkcijas DATE_ADD() vai DATE_SUB(), taču EXTRACT() izvelk daļu no datuma vērtības, nevis veic aritmētiku.

Mysql> SELECT EXTRACT(GADS NO "1999-07-02"); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH NO "1999-07-02 01:02:03"); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); -> 20102

funkcija atgriež dienas numuru datuma argumentā norādītajam datumam (dienu skaits, kas pagājušas kopš 0 gada):

Mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS("1997-10-07"); -> 729669

Funkcija TO_DAYS() nav paredzēta lietošanai ar vērtībām pirms Gregora kalendāra (1582) ieviešanas, jo tā neņem vērā dienas, kas zaudētas, mainot kalendāru.

Atgriež DATE vērtību dotajam dienas numuram N:

Mysql> SELECT FROM_DAYS(729669); -> "1997-10-07"

Funkcija FROM_DAYS() nav paredzēta lietošanai ar vērtībām pirms Gregora kalendāra (1582) ieviešanas, jo tā neņem vērā dienas, kas zaudētas, mainot kalendāru.

DATE_FORMAT(datums,formāts)

Formatē datuma vērtību atbilstoši formāta virknei. Formāta rindā var izmantot šādus kvalifikatorus:

Noteicējs Apraksts
%M Mēneša nosaukums (janvāris...decembris)
%W Nedēļas dienas nosaukums (svētdiena...sestdiena)
%D Mēneša diena ar sufiksu angļu valodā (0st, 1st, 2nd, 3rd utt.)
%Y Gads, datums, 4 cipari
%y Gads, datums, 2 cipari
%X Gads nedēļai, kurā svētdiena tiek uzskatīta par nedēļas pirmo dienu, skaitlis, 4 cipari, lietots kopā ar "%V"
%x Gads nedēļai, kurā svētdiena tiek uzskatīta par nedēļas pirmo dienu, skaitlis, 4 cipari, lietots kopā ar "%v"
%a Nedēļas dienas saīsinātais nosaukums (sv...sest)
%d Mēneša diena, numurs (00..31)
%e Mēneša diena, skaitlis (0..31)
%m Mēnesis, diena (00..12)
%c Mēnesis, datums (0..12)
%b Mēneša saīsinātais nosaukums (jan...decembris)
%j Gada diena (001..366)
%H Stunda (00..23)
%k Stunda (0..23)
%h Stunda (01..12.)
%I Stunda (01..12.)
%l Stunda (1..12)
%i Minūtes, skaitlis (00..59)
%r Laiks, 12 stundu formāts (hh:mm:ss M)
%T Laiks, 24 stundu formāts (hh:mm:ss)
%S Sekundes (00..59)
%s Sekundes (00..59)
%p AM vai PM
%w Nedēļas diena (0=svētdiena..6=sestdiena)
%U Nedēļa (00..53), kur svētdiena tiek uzskatīta par nedēļas pirmo dienu
%u Nedēļa (00..53), kur pirmdiena tiek uzskatīta par nedēļas pirmo dienu
%V Nedēļa (01..53), kur svētdiena tiek uzskatīta par nedēļas pirmo dienu. Lietots ar "%X"
%v Nedēļa (01..53), kur pirmdiena tiek uzskatīta par nedēļas pirmo dienu. Lietots ar " %x "
%% Burtiski "%".

Visas pārējās rakstzīmes tiek vienkārši iekopētas iegūtajā izteiksmē bez interpretācijas:

Mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%W %M %Y"); -> "Sestdiena, 1997. gada oktobris" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%H:%i:%s"); -> "22:23:00" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%D %y %a %d %m %b %j"); -> "4th 97 Sat 04 10 Oct 277" mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%H %k %I %r %T %S %w"); -> "22 22 10 10:23:00 PM 22:23:00 00 6" mysql> SELECT DATE_FORMAT("1999-01-01", "%X %V"); -> "1998 52"

MySQL 3.23 rakstzīmei "%" ir jābūt pirms formāta specifikācijas rakstzīmēm. Iepriekšējās MySQL versijās rakstzīme "%" nav obligāta.

Iemesls, kāpēc mēneša un dienas intervāli sākas ar nulli, ir tas, ka MySQL kopš MySQL 3.23 atļauj daļējus datumus, piemēram, "2004-00-00".

TIME_FORMAT(laiks, formāts)

Šī funkcija tiek izmantota līdzīgi kā iepriekš aprakstītā funkcija DATE_FORMAT(), taču formāta virknē var būt tikai formāta specifikācijas, kas attiecas uz stundām, minūtēm un sekundēm. Norādot citus kvalifikatorus, tiks atgriezta vērtība NULL vai 0.

CURDATE() , CURRENT_DATE

Atgriež šodienas datumu kā vērtību formātā GGGG-MM-DD vai GGGGMMDD atkarībā no tā, vai funkcija tiek izmantota virknes vai ciparu kontekstā:

Mysql> SELECT CURDATE(); -> "1997-12-15" mysql> SELECT CURDATE() + 0; -> 19971215

CURTIME() , CURRENT_TIME

Atgriež pašreizējo laiku kā vērtību formātā HH:MM:SS vai HHMMS atkarībā no tā, vai funkcija tiek izmantota virknes vai ciparu kontekstā:

Mysql SELECT CURTIME (); -> "23:50:26" mysql> SELECT CURTIME() + 0; -> 235026

TAGAD() , SYSDATE() , CURRENT_TIMESTAMP

Atgriež pašreizējo datumu un laiku kā vērtību formātā GGGG-MM-DD HH:MM:SS vai GGGGMMDDHHMMSS atkarībā no tā, vai funkcija tiek izmantota virknes vai ciparu kontekstā:

Mysql> SELECT NOW(); -> "1997-12-15 23:50:26" mysql> SELECT NOW() + 0; -> 19971215235026

Ņemiet vērā, ka NOW() katram pieprasījumam tiek novērtēts tikai vienu reizi, proti, tā izpildes sākumā. Tas nodrošina, ka vairākas atsauces uz NOW() vienā vaicājumā radīs vienu un to pašu vērtību.

UNIX_TIMESTAMP() , UNIX_TIMESTAMP(datums)

Izsaucot bez argumenta, šī funkcija atgriež UNIX_TIMESTAMP laikspiedolu (sekundes kopš 1970-01-01 00:00:00 GMT) kā neparakstītu veselu skaitli. Ja funkcija UNIX_TIMESTAMP() tiek izsaukta ar datuma argumentu, tā atgriež argumenta vērtību kā sekunžu skaitu kopš 1970-01-01 00:00:00 GMT. Datuma arguments var būt virkne DATE, DATETIME, TIMESTAMP vērtība vai skaitlis vietējā laika formātā GGMMDD vai GGGGMMDD:

Mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP("1997-10-04 22:23:00"); -> 875996580

Izmantojot funkciju UNIX_TIMESTAMP kolonnā TIMESTAMP, šī funkcija atgriezīs iekšējā laikspiedola vērtību tieši, bez netiešas virknes pārveidošanas par laikspiedolu ("string-to-unix-timestamp"). Ja norādītais datums ir ārpus derīgā diapazona, funkcija UNIX_TIMESTAMP() atgriezīs 0 , taču ņemiet vērā, ka tiek veikta tikai pamata pārbaude (1970.-2037. gads, 01.-12. mēnesis, 01.-31. diena). Ja nepieciešams veikt UNIX_TIMESTAMP() kolonnas atņemšanu, rezultātu var pārvērst veselos skaitļos ar zīmi. Skatiet 6.3.5. sadaļu “Tipu izliešanas funkcijas”.

NO_UNIXTIME(unix_timestamp)

Atgriež unix_timestamp argumenta attēlojumu kā vērtību formātā GGGG-MM-DD HH:MM:SS vai GGGGMMDDHHMMSS atkarībā no tā, vai funkcija tiek izmantota virknes vai ciparu kontekstā:

Mysql> SELECT FROM_UNIXTIME(875996580); -> "1997-10-04 22:23:00" mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300

NO_UNIXTIME(unix_laikspiedols,formāts)

Atgriež argumenta unix_timestamp virknes attēlojumu, kas formatēts atbilstoši formāta virknei. Formāta virknē var būt tie paši kvalifikatori, kas norādīti funkcijas DATE_FORMAT() aprakstā:

Mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), "%Y %D %M %h:%i:%s %x"); -> "1997. gada 23. decembris 03:43:30 1997"

SEC_TO_TIME(sekundes)

Atgriež argumentu sekundes, kas pārvērsts stundās, minūtēs un sekundēs kā vērtību formātā HH:MM:SS vai HHMMSS , atkarībā no tā, vai funkcija tiek izmantota virknes vai ciparu kontekstā:

Mysql> SELECT SEC_TO_TIME(2378); -> "00:39:38" mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938

TIME_TO_SEC(laiks)

Atgriež laika argumentu, kas pārveidots sekundēs:

Mysql> SELECT TIME_TO_SEC("22:23:00"); -> 80580 mysql> SELECT TIME_TO_SEC("00:39:38"); -> 2378


šī raksta publicēšana ir atļauta tikai ar saiti uz raksta autora vietni

Kā zināms, mysql visi datumi tiek glabāti apgrieztā gada-mēneša-dienas secībā (2008-10-18), dažreiz pat bez atdalītāja (20081018).
Lai parādītu datumu, tas ir jāpārvērš parastā lasāmā formā.

Ir divas konversijas metodes, efektīvas un ne pārāk efektīvas.
Neefektīvs veids ir, ja datuma izvade no mysql tiek konvertēta, izmantojot php.
Es personīgi pats to darīju ļoti ilgu laiku. Pirms parādīšanas es apgriezu katru datumu, izmantojot php funkciju.
Ja transformāciju skaits nav liels, tad var apgriezt datumu ar PHP, tur nav nekā slikta, bet ja vajag izvilkt desmitiem vai simtiem tūkstošu ierakstu un konvertēt datumu katrā, tad protams konvertēt datumi, izmantojot mysql, būs daudz ātrāki.

Mysql ir lieliska DATE_FORMAT() funkcija, tā ir ļoti līdzīga php date() funkcijai.
Šeit ir lietošanas piemērs

SELECT DATE_FORMAT("2008-11-19","%d.%m.%Y");
rezultāts

Viss ir ļoti vienkārši un ātri, nav jāmaina datumi, izmantojot php.
Šeit ir šīs funkcijas definīciju saraksts

Noteicējs Apraksts
%M Mēneša nosaukums (janvāris...decembris)
%W Nedēļas dienas nosaukums (svētdiena...sestdiena)
%D Mēneša diena ar sufiksu angļu valodā (0st, 1st, 2nd, 3rd utt.)
%Y Gads, datums, 4 cipari
%y Gads, datums, 2 cipari
%X Gads nedēļai, kurā svētdiena tiek uzskatīta par nedēļas pirmo dienu, skaitlis, 4 cipari, lietots kopā ar "%V"
%x Gads nedēļai, kurā svētdiena tiek uzskatīta par nedēļas pirmo dienu, skaitlis, 4 cipari, lietots kopā ar "%v"
%a Nedēļas dienas saīsinātais nosaukums (sv...sest)
%d Mēneša diena, numurs (00..31)
%e Mēneša diena, skaitlis (0..31)
%m Mēnesis, diena (00..12)
%c Mēnesis, datums (0..12)
%b Mēneša saīsinātais nosaukums (jan...decembris)
%j Gada diena (001..366)
%H Stunda (00..23)
%k Stunda (0..23)
%h Stunda (01..12.)
%I Stunda (01..12.)
%l Stunda (1..12)
%i Minūtes, skaitlis (00..59)
%r Laiks, 12 stundu formāts (hh:mm:ss M)
%T Laiks, 24 stundu formāts (hh:mm:ss)
%S Sekundes (00..59)
%s Sekundes (00..59)
%p AM vai PM
%w Nedēļas diena (0=svētdiena..6=sestdiena)
%U Nedēļa (00..53), kur svētdiena tiek uzskatīta par nedēļas pirmo dienu
%u Nedēļa (00..53), kur pirmdiena tiek uzskatīta par nedēļas pirmo dienu
%V Nedēļa (01..53), kur svētdiena tiek uzskatīta par nedēļas pirmo dienu. Lietots ar "%X"
%v Nedēļa (01..53), kur pirmdiena tiek uzskatīta par nedēļas pirmo dienu. Lietots ar %x
%% Burtiski "%".

komentāri

27.11.2008 ----
Čau shaitan!!!
Pats jau piecus gadus strādāju pie php un mysql, un visu laiku mainīju datumu php...
Man pat neienāca prātā, ka būtu vieglāk izmantot iebūvēto mysql funkciju

28.11.2008 Zheka
Tāpat! Es vienmēr esmu izmantojis savu php funkciju

12/03/2008 Sergejs
Nu, vispār, vai kāds vispār izmanto šo pieeju?
Vai arī visi izmanto php, lai mainītu datumu?
Es personīgi nekad neesmu mainījis datumu mysql, joprojām visu daru php

28.06.2009 Iļja
Diemžēl nekas neizdevās :(

08.07.2009 Vitālijs
Forši, paldies par funkciju. Interesanti, kādi tur vēl ķeburi?

14.07.2009 DSaint
Paldies, tas ļoti palīdzēja. Atliek tikai parādīt mēneša nosaukumu krievu valodā)

28.07.2009 Vlad
mysql=>PHP
atlasiet unix_timestamp(sākuma_datums) kā sākuma_datums_php
php-kods
datums("d.m.Y",$row["sākuma_datums_php"])

PHP=>MySQL
atjaunināšanas tabulas kopa start_date=DATE_FORMAT(STR_TO_DATE("19/12/2009 18:35:22 PM","%d.%m.%Y %H:%i"),"%Y.%m.%d % Sveiki")

18.08.2009 Viesis
2:DSaint
Ir tik brīnišķīga funkcija:
ELT(MĒNESIS("2004-04-10"), "Jan.","februāris","marts","aprīlis."maijs","jūnijs","jūlijs","aug."," Sep.""Okt.","Nov.","Dec.")

Lieto to. :-)

29.10.2009 Vladimirs
Paldies, par ELT(MONTH("2004-04-10"), "Jan.","Febr.","Marts","Apr.""Maijs","Jūnijs","Jūlijs","Augsts ""Sep.","Okt.","Nov.","Dec.")
neesmu dzirdējis.

07.10.2010 Jevgeņijs
Kas darbojas ātrāk? Pārvēršana pieprasījumā vai PHP funkcijas rezultātā?

07.10.2010 aizsargs
Vismaz mazāk apstrādājamās atmiņas, mazāk funkciju izsaukumu, mazāk atmiņas piešķiršanas... Es visu laiku lietoju kaut ko tādu, bet ne mysql, bet gan postgresql.

10/08/2010 Admin
Jevgeņijs, aizstāvis pareizi teica, ka šai transformācijai datu bāzē vajadzētu darboties skaistāk, bet, protams, ja mēs runājam par milzīga datu apjoma ieguvi.
Ja velk 10-20 ierakstus, tad nav atšķirības, kā konvertēt datumu, salīdzinot ar citām slodzēm, tas ir sīkums.

27.01.2011 pcemma
uhh paldies afftor (: vairs nav jāizmanto mana mega foršā funkcija konvertēšanai (:

13.04.2011 Xes
KĀ TO IZMANTOT PHP
while ($sqlr=mysql_fetch_array($sql))
{
echo ($sqlr["comadd"]." ".$sqlr["komentārs"]."

");

$sqlr["comadd"] — vai tas ir jāuzrāda parastā formā?
}

14.04.2011 Vitālijs
Man datu bāzē ir datums formātā 19/11/2008, tabulas tips VARCHAR, kā es varu to pārrakstīt datu bāzē formātā 2008-11-19?
Rokas tikai ļoti ilgi...
Paldies.

15.04.2011 admin
Xes ir MySQL funkcija, jums tā ir jāizmanto sql vaicājumā, kas, spriežot pēc jūsu koda, atrodas kaut kur augstāk. To nevar izmantot šajā koda sadaļā.

15.04.2011 admin
Vitālij, vienkārši mainiet šūnas tipu uz DATE, mysql automātiski konvertēs visus datus šajā šūnā uz 2008-11-19 formātu.
Bet katram gadījumam pirms šūnas tipa maiņas uztaisi šīs tabulas izgāztuvi, jo pēkšņi datu bāze kaut ko izdarīs nepareizi un tabula salūzīs pavisam.

Ja jums ir svarīgi atstāt lauka veidu kā varchar, pēc DATE veida iestatīšanas iestatiet to atpakaļ uz varchar...

Šī ir vienkāršākā iespēja, bet ne pilnīgi pareiza, taču es pārbaudīju, vai tā darbojas.

14.05.2011 DDD
datums("d-m-Y",strtotime("$myrow"));

24.05.2011 Konstantīns
un es vienmēr uztveru SELECT *,UNIX_TIMESTAMP(created) KĀ izveidots NO...
Bet ar motoru es to varu izdarīt jebkurā formātā. Pat tikai dienu, pat tikai laiku...
un salīdziniet, kas ir lielāks par 14.05.2011 vai 14.05.2010...
Un es to rakstu šādi:
...date=".gmdate("Y-m-d H:i:s",$created)...
un vispār es neredzu iemeslu mainīt ieradumus

24.05.2011 Sergejs
Konstantīns, es pats izvadīšanai izmantoju php date(), bet šeit mēs apsveram iespēju konvertēt datumu nevis caur php, bet caur mysql.

Es teiktu, ka šis ir tikai pārskats par mysql funkciju, un tai noteikti ir tiesības pastāvēt...




Tops