Mysql merr datën aktuale. Funksionet e formatimit të datës dhe orës MYSQL

MySql nuk është vetëm një sistem tërheqës për organizimin e ruajtjes së të dhënave, por edhe një MJEGËL SHKELQYER për përpunimin e informacionit.

Sot do të shikojmë punën me funksionet mysql: Date, DateTime. Do të flas gjithashtu për metodat mysql të përdorura për të kthyer një varg në një datë. Në përgjithësi, ka qasje të ndryshme për zgjidhjen e problemeve që lidhen me datat në DBMS mysql.

Problem.

Le të imagjinojmë se po shkruani një sistem për dërgimin e njoftimeve SMS në bazën tuaj të klientëve.
Tabela 1. tbl_clients* - tabela me të dhënat e klientit (emri i plotë dhe data e lindjes), të dhëna për sasinë, llojin e produktit dhe statusin e përpunimit të aplikacionit.

Tabela 2. tbl_sms – tabela e statuseve të SMS-ve dhe lidhja e ID-së së klientit me datën e marrjes së statusit.

Më afër luftimit. Ne armatosemi me funksione të integruara.

Tabela tbl_sms përmban disa rekorde për një Id_client, me statuse dhe kohë të ndryshme pranimi. Për shembull:

Le të supozojmë se shefi kërkon një listë të statuseve më të fundit për të gjithë klientët. Ju mund ta zgjidhni shpejt problemin duke përdorur funksionet e integruara. Pyetja sql për këtë rast duket si kjo:

SELECT * NGA tbl_sms ts JOIN (SELECT Id_clients, max(Date_status) as max_dat FROM tbl_sms GROUP BY BY Id_clients) ts_max ON ts. id_clients = ts_max. id_clients dhe ts. Data_status= ts_max.max_dat ;

Rezultati i pyetjes është një përzgjedhje e të dhënave me datën maksimale për secilin klient_Id:

Kërkesa është komplekse, nuk e kuptova herën e parë, por do të përpiqem të shpjegoj. Në një pyetje, ne bashkojmë dy tabela. Tbl_sms i parë përmban të gjitha të dhënat pa marrë parasysh kushtet, si të thuash në "formë të papërpunuar". Tabela e dytë është rezultat i pyetjes

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

në të njëjtin tbl_sms duke përdorur funksionin MAX() dhe grupimin sipas fushës Id_clients.

Në tabelën e dytë, ne grupojmë regjistrimet sipas id_clients duke përdorur konstruktin "GROUP BY Id_clients". Kjo do të thotë, tani kemi një rekord (megjithëse ka disa regjistrime në tabelë për një vlerë id_clients) - kjo është një vlerë e fushës id_clients. Në SELECT përdorim funksionin MAX(), rezultati i të cilit është zgjedhja e vlerës maksimale të regjistruar në fushën e tabelës. Për referencë, në DBMS mysql ekziston një funksion invers MIN(). Si rezultat, në një pyetje duke përdorur funksionin MAX(), marrim vlerën maksimale të fushës Date_status për secilën vlerë të fushës id_clients.
Dhe së fundi, përzgjedhja e regjistrimeve që plotësojnë kushtet e mëposhtme: “ON ts. id_clients = ts_max. id_clients dhe ts. Data_status= ts_max.max_dat”, marrim rezultatin e dëshiruar.

Shefi është i kënaqur. Por më pas vjen një kontabilist dhe vendos një detyrë të re: "Duhet të zgjedhim të gjitha statuset që kemi marrë vetëm për 10/05/2014."

Ne shkruajmë kërkesën e mëposhtme:

SELECT * FROM tbl_sms WHERE Date_status>'2014-10-05 00:00:00' Dhe Statusi_Date<’2014-10-05 23:59:59’ ;

Meqenëse lloji i të dhënave të fushës Date_status është DATETIME, prandaj vendosim kushtet e mëposhtme: vlerën Nga ora 00:00 deri në 23:59 10/05/2014 - kjo periudhë përfshin saktësisht një ditë ose 24 orë. Duhet t'i kushtoni vëmendje formës së regjistrimit të datës. Në llojin e të dhënave Date në mysql, ne përfaqësojmë datën në formatin e mëposhtëm Viti(4)-Muaji(2)-Dita(2). Nëse fusha "statusi" do të ishte në formatin DATE, kërkesa do të dukej kështu:

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

Ne kemi kuptuar detyrën e kontabilistit. Raportet janë dorëzuar. Tani le të shohim punën me datat në mysql nga një kënd tjetër - nëse data përfaqësohet si një varg. Ndonjëherë ndodh…

Data në llojin VARCHAR ose CHAR... Çfarë të bëni? Përdorimi i funksionit të konvertimit të vargut.

Unë vetë kam hasur në një problem të ngjashëm më shumë se një herë. Fakti është se nëse keni një datë në formën e një vargu, atëherë të gjitha pyetjet e përshkruara më sipër bëhen të padobishme. Për shembull, ju duhet të zgjidhni të gjithë klientët, vlerat e fushës Date_Zap të të cilëve qëndrojnë në një periudhë të caktuar data. Mos i rendis të gjitha datat... Sigurisht që jo. Gjithmonë ka një rrugëdalje dhe funksionet e integruara do të na ndihmojnë përsëri. Për një detyrë të tillë në mysql, ekziston një funksion STR_TO_DATE().
Siç sugjeron emri, funksioni konverton një varg në një datë. Argumentet për funksionin STR_TO_DATE janë një datë në një lloj të dhënash CHAR ose VARCHAR dhe formati i datës YOU KALONI.

Për shembull, ju do të pyesni tabelën tbl_clients:

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

Rezultati i përdorimit të funksionit STR_TO_DATE():

Siç mund ta shihni, nga formati i zakonshëm i datës marrim një datë të formatit mysql. Disa komente në lidhje me kërkesën:

  • Nëse nuk jeni plotësisht të sigurt për rezultatin e funksionit, bëni gjithmonë si këtu për të parë vlerat e fushës para dhe pas transformimit. Kjo do t'ju kursejë nervat.
  • Nëse do të përdorni rezultatin, për shembull, në një program dhe do t'i referoheni në mënyrë specifike emrit të fushës, atëherë ju këshilloj të zëvendësoni emrin e gjatë "STR_TO_DATE(Date_Zap,'%d.%m.%Y')", për shembull, me emrin Data_Mysql, për këtë modifikojmë pyetjen
SELECT Date_Zap, STR_TO_DATE(Date_Zap,'%d.%m.%Y') si Data_Mysql FROM tbl_clients WHERE id_clietns='345';

Rezultati i përdorimit të funksionit të konvertimit të një vargu në një format të datës mysql (STR_TO_DATE()):

Shfaq datën me fjalë.

Shpesh është e nevojshme të sigurohet që kur krijoni raporte nga një bazë të dhënash (mysql), data e dokumenteve duhet të jetë në formatin "Dita Muaji me fjalë Viti". Për shembull: ka "10/21/2014", por ju duhet "21 tetor 2014". Kur hasa një problem të tillë, shkrova një përpunim të tërë në Delphi për të gjeneruar datën. Doli që mysql DBMS tashmë ka një funksion të integruar për konvertimin e një date nga një paraqitje numerike në një datë me fjalë. Dhe, siç thashë në fillim, mysql nuk është vetëm një mjet për menaxhimin e ruajtjes së të dhënave, por edhe një mjet përpunimi informacioni.
Pra, është e lehtë të marrësh një datë në formatin e përshkruar më sipër në një kërkesë të thjeshtë:

SELECT DATE_FORMAT('2014-10-21','%d %M %Y') si Data_Mysql; //Vini re drejtshkrimin %M

Gjithçka do të ishte mirë, data shfaqet me fjalë, por emri i muajit është në anglisht. Kjo mund të ndodhë nëse serveri ka një ndryshore globale lc_time_names=en_EN. Vlera për datën ruse do të jetë e barabartë me: lc_time_names=ru_RU.
Ka disa opsione për zgjidhjen e këtij problemi.
Opsioni i parë është të vendosni vlerën e paracaktuar në konfigurimin e serverit mysql. Për ta bërë këtë, hapni my.ini në drejtorinë ku është instaluar serveri mysql dhe në seksionin "", futni rreshtin "lc_time_names = "ru_RU"".
Opsioni i dytë do t'ju përshtatet nëse nuk ka qasje të drejtpërdrejtë në konfigurimin e mysql. Vlera e variablit mund të ndryshohet kur ekzekutohet një pyetje sql. Thjesht bëni sa më poshtë përpara kërkesës: "SET lc_time_names = 'ru_RU';". Me këtë komandë ju vendosni vlerën e ndryshores lc_time_names në këtë sesion me serverin mysql. Kjo do të thotë, nëse humbni lidhjen me serverin mysql, kur të rilidheni, ai do të vendoset në vlerën e paracaktuar "en_EN".
Prandaj, ju këshilloj të përdorni komandën menjëherë përpara se të ekzekutoni pyetjen sql. Në këtë rast, pyetja përfundimtare do të duket si kjo:

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

Rezultati i pyetjes sql duke përdorur funksionin DATE_FORMAT():

Siç mund ta shihni, gjithçka është bërë e saktë, emri i muajit është bërë rus.
Kështu, duke përdorur funksionet mysql, është e lehtë dhe e shpejtë për të përpunuar informacionin. Unë ju këshilloj të mos bëni punë që mund t'ia delegoni mjeteve mysql. Në këtë mënyrë ju duhet të shkruani më pak kod, dhe në 90% të rasteve një sistem i tillë do të funksionojë më stabil. Testuar nga përvoja ime. Shpresoj se ky artikull do të jetë i dobishëm për ju, të dashur lexues! Përshëndetje, Shinobi juaj.

Pra, të gjitha llojet e të dhënave kalendarike përshkruhen në detaje në seksionin “10.3. Llojet e datës dhe kohës » Tutorialë të MySQL. Informacion i rëndësishëm në lidhje me mbështetjen e DBMS për zonat kohore përshkruhet në seksionin “9.7. Mbështetja e zonës kohore të serverit MySQL". Gjithçka që vijon bazohet në studimin e manualit. Në të njëjtën kohë, këtu tregohen vetëm nuancat e zgjedhjes në favor të një lloji ose një tjetër, kështu që ky material nuk e zëvendëson manualin në asnjë mënyrë, por e plotëson atë.

Së pari, një përshkrim i shkurtër i secilit lloj:

  • TIMESTAMP - lloji i të dhënave për ruajtjen e datës dhe kohës. Të dhënat ruhen si numri i sekondave që kanë kaluar që nga fillimi i "epokës Unix". Gama e vlerave: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Zë 4 bajt.
  • YEAR - lloji i të dhënave për ruajtjen e vitit. Gama e vlerave: 1901 - 2155. Zë 1 bajt.
  • DATE është një lloj të dhënash për ruajtjen e datave. Gama e vlerave: 1000-01-01 - 9999-12-31. Zë 3 bajt.
  • TIME është një lloj i të dhënave për ruajtjen e kohës. Gama e vlerave: −828:59:59 - 828:59:59. Zë 3 bajt.
  • DATETIME është një lloj të dhënash për ruajtjen e datës dhe orës. Gama e vlerave: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Zë 8 bajt.
Shënim për zonjën. Gjëja interesante është se shumica e programuesve besojnë se koncepti i "vulës kohore" është koha Unix. Në fakt, një stamp kohor është një shenjë që është një sekuencë karakteresh që tregojnë datën dhe/ose kohën kur ka ndodhur një ngjarje e caktuar. Dhe "Unix time" (koha Unix) ose koha POSIX është numri i sekondave që kanë kaluar që nga mesnata e 1 janarit 1970 UTC. Koncepti i vulës kohore është më i gjerë se koha Unix.

Pas analizimit të përshkrimit të llojeve të paraqitura më sipër, mund të nxirrni pothuajse të gjitha përfundimet në lidhje me avantazhet dhe disavantazhet e llojeve të caktuara. Gjithçka është mjaft e thjeshtë dhe e qartë.

Por, para se të flas për përdorimin e këtyre llojeve, dua të vërej se në praktikë, një lloj tjetër përdoret shpesh për të ruajtur datën dhe kohën: një vlerë e plotë (për ruajtjen e datës - INT (4 bytes), data dhe ora - BIGINT (8 byte)). I vetmi ndryshim midis përdorimit të llojeve të numrave të plotë dhe DATE dhe DATETIME është se të dhënat nuk formatohen gjatë daljes, dhe në llogaritjet me data dhe kohë, numrat e plotë duhet të konvertohen në llojin e duhur të kalendarit. Përveç kësaj, nuk ka asnjë kontroll për vlefshmërinë e vlerës së paraqitur përpara se të ruani. Aftësitë e renditjes ruhen. Prandaj, ka kuptim të përdoret INT dhe BIGINT në të njëjtat raste si DATE dhe DATETIME, në mënyrë që të maksimizohet transportueshmëria dhe pavarësia nga DBMS. Unë nuk shoh ndonjë avantazh tjetër nëse ka, ju sugjeroj t'i tregoni ato në komente.

Përdorimi i llojeve të të dhënave të kalendarit në MySQL

Le të fillojmë me llojin më të thjeshtë VITI. Avantazhi i tij i vetëm është madhësia e vogël - vetëm 1 bajt. Por për shkak të kësaj, ekziston një kufizim i rreptë në gamën e vlerave të vlefshme (lloji mund të ruajë vetëm 255 vlera të ndryshme). E kam të vështirë të imagjinoj një situatë praktike ku dikush mund të dëshirojë të ruajë vitet rreptësisht në intervalin nga 1901 deri në 2155. Për më tepër, lloji SMALLINT (2 bajt) jep një gamë që është e mjaftueshme në shumicën e situatave për të ruajtur një vit. Dhe ruajtja e 1 bajt për rresht në një tabelë të bazës së të dhënave nuk ka kuptim në kohën tonë.

Llojet DATA Dhe DATA KOHA mund të kombinohen në një grup. Ata ruajnë një datë ose datë dhe orë me një gamë mjaft të gjerë vlerash të vlefshme, pavarësisht nga zona kohore e vendosur në server. Përdorimi i tyre padyshim ka kuptim praktik. Por nëse doni të ruani data për ngjarje historike që shkojnë përtej epokës së zakonshme, do t'ju duhet të zgjidhni lloje të tjera të dhënash. Këto lloje janë ideale për ruajtjen e datave për ngjarje të caktuara që mund të bien jashtë gamës së llojit TIMESTAMP (ditëlindje, datat e lëshimit të produktit, zgjedhjet presidenciale, lëshimet e raketave hapësinore, etj.). Kur përdorni këto lloje, duhet të merrni parasysh një nuancë të rëndësishme, por më shumë për këtë më poshtë.

Lloji KOHA mund të përdoret për të ruajtur një periudhë kohore kur nuk nevojitet saktësi më pak se 1 sekondë dhe periudha kohore më pak se 829 orë. Nuk ka asgjë më shumë për të shtuar këtu.

Lloji më interesant mbetet - VULL KOHORE. Duhet të merret parasysh në krahasim me DATE dhe DATETIME: TIMESTAMP është projektuar gjithashtu për të ruajtur datën dhe/ose kohën e ndodhjes së ngjarjeve të caktuara. Një ndryshim i rëndësishëm midis tyre është në diapazonin e vlerave: padyshim, TIMESTAMP nuk është i përshtatshëm për ruajtjen e ngjarjeve historike (madje si ditëlindjet), por është i shkëlqyeshëm për ruajtjen e atyre aktuale (prerjet, datat e postimit të artikujve, shtimi i produkteve, vendosja e porosive) dhe ato të ardhshme në ngjarjet e ardhshme të parashikueshme (publikimet e versioneve të reja, kalendarët dhe programuesit, etj.).

Lehtësia kryesore e përdorimit të llojit TIMESTAMP është se për kolonat e këtij lloji në tabela mund të vendosni një vlerë të paracaktuar në formën e një zëvendësimi të kohës aktuale, si dhe të vendosni kohën aktuale kur përditësoni një rekord. Nëse keni nevojë për këto veçori, atëherë ka 99% mundësi që TIMESTAMP të jetë pikërisht ajo që ju nevojitet. (Shihni manualin se si ta bëni këtë.)

Mos kini frikë se programi juaj do të ndalojë së punuari ndërsa i afrohemi vitit 2038. Së pari, para kësaj kohe, softueri juaj me shumë mundësi thjesht do të ndalet së përdoruri (veçanërisht versionet që po shkruhen tani). Së dyti, me afrimin e kësaj date, zhvilluesit e MySQL patjetër do të gjejnë diçka për të ruajtur funksionalitetin e softuerit tuaj. Gjithçka do të zgjidhet si dhe problemi Y2K.

Pra, ne përdorim llojin TIMESTAMP për të ruajtur datat dhe orët e ngjarjeve të kohës sonë, dhe DATETIME dhe DATE për të ruajtur datat dhe oraret e ngjarjeve historike ose ngjarjeve të së ardhmes së thellë.

Gama e vlerave janë një ndryshim i rëndësishëm midis llojeve TIMESTAMP, DATETIME dhe DATE, por ato nuk janë ndryshimi kryesor. Kryesor që TIMESTAMP ruan vlerën në UTC. Kur ruani një vlerë, ajo përkthehet nga zona aktuale kohore në UTC, dhe kur e lexoni atë, përkthehet nga zona aktuale kohore nga UTC. DATETIME dhe DATE ruajnë dhe shfaqin gjithmonë të njëjtën orë, pavarësisht nga zonat kohore.

Zonat kohore vendosen globalisht në MySQL DBMS ose për lidhjen aktuale Kjo e fundit mund të përdoret për të siguruar punën e përdoruesve të ndryshëm në zona të ndryshme kohore në nivelin DBMS. Të gjitha vlerat kohore do të ruhen fizikisht në UTC dhe do të merren nga klienti dhe do t'i jepen klientit - në vlerat e zonës së tij kohore. Por vetëm kur përdorni llojin e të dhënave TIMESTAMP. DATE dhe DATETIME marrin, ruajnë dhe kthejnë gjithmonë të njëjtën vlerë.

Funksioni NOW() dhe sinonimet e tij kthejnë vlerën e kohës në zonën aktuale kohore të përdoruesit.

Duke pasur parasysh të gjitha këto rrethana, duhet të jeni jashtëzakonisht të kujdesshëm kur ndryshoni zonën kohore brenda një lidhjeje me serverin dhe përdorni llojet DATE dhe DATETIME. Nëse keni nevojë të ruani një datë (për shembull, datën e lindjes), atëherë nuk do të ketë probleme. Data e lindjes është e njëjtë në çdo zonë. Ato. nëse keni lindur më 1 janar në orën 0:00 UTC/GMT+0, atëherë kjo Jo do të thotë që në Amerikë do të festojnë ditëlindjen tuaj më 31 dhjetor. Por nëse vendosni të ruani koha ngjarjet në kolonën DATETIME, atëherë thjesht nuk do të jetë e mundur të punohet me zonat kohore të përdoruesit në nivelin DBMS. Më lejoni të shpjegoj me një shembull:

Përdoruesi X punon në zonën UTC/GMT+2, Y - në zonën UTC/GMT+3. Për lidhjet e përdoruesve me MySQL, vendoset një zonë kohore përkatëse (secila ka të vetin). Përdoruesi poston një mesazh në forum, ne jemi të interesuar në datën kur është shkruar mesazhi.

Opsioni 1: DATETIME. Përdoruesi X shkruan një mesazh në orën 14:00 UTC/GMT+2. Vlera në fushën "data" e mesazhit zëvendësohet si rezultat i ekzekutimit të funksionit TANI () - 14:00. Përdoruesi Y lexon kohën kur është shkruar mesazhi dhe sheh të njëjtën orë 14:00. Por cilësimet e tij janë vendosur në UTC/GMT+3, dhe ai mendon se mesazhi është shkruar jo vetëm tani, por një orë më parë.

Opsioni 2: STAMP KOHORE. Përdoruesi X shkruan një mesazh në orën 14:00 UTC/GMT+2. Fusha "data" përmban rezultatin e ekzekutimit të funksionit TANI() - në këtë rast - 12:00 UTC/GMT+0. UserY lexon kohën kur është shkruar mesazhi dhe merr (UTC/GMT+3)(12:00 UTC/GMT+0) = 15:00 UTC/GMT+3. Gjithçka rezulton pikërisht ashtu siç duam. Dhe më e rëndësishmja, është jashtëzakonisht i përshtatshëm për t'u përdorur: për të mbështetur zonat kohore të personalizuara, nuk keni nevojë të shkruani ndonjë kod konvertimi orar.

Mundësitë e zëvendësimit të orës aktuale dhe punës me zonat kohore në llojin TIMESTAMP janë aq të fuqishme sa nëse duhet të ruash një datë pa kohë në një regjistër të caktuar, duhet të përdorësh sërish TIMESTAMP në vend të DATE, pa kursyer 1 bajt të diferencës. mes tyre. Në këtë rast, thjesht injoroni "00:00:00".

Nëse nuk mund të përdorni TIMESTAMP për shkak të diapazonit relativisht të vogël të vlerave të tij (zakonisht 1-2 raste kundrejt 10-15 në bazën e të dhënave të faqes), do t'ju duhet të përdorni DATETIME dhe të rregulloni me kujdes vlerat e tij në vendet e duhura ( d.m.th. kur shkruani në këtë fushë, konvertoni datën në UTC, dhe kur lexoni - në kohën në zonën e përdoruesit të leximit). Nëse ruani vetëm datën, atëherë ka shumë të ngjarë që nuk ka rëndësi se çfarë zone kohore keni: të gjithë festojnë Vitin e Ri më 1 janar, sipas kohës lokale, kështu që nuk keni nevojë të përktheni asgjë këtu.

Vlerat në këto formate:

    Si varg në formatin "YYYY-MM-DD" ose "YY-MM-DD". Lejohet një sintaksë e qetë: çdo karakter pikësimi mund të përdoret si ndarës midis pjesëve të datave. Për shembull, "2012-12-31", "2012/12/31", "2012^12^31" dhe "2012@12@31" janë ekuivalente.

    Si varg pa kufij në formatin "YYYYMMDD" ose "YYMMDD" me kusht që vargu të ketë kuptim si datë. Për shembull, "20070523" dhe "070523" interpretohen si "2007-05-23", por "071332" është i paligjshëm (ka pjesë të muajit dhe ditës të pakuptimta) dhe bëhet "0000-00-00".

    Si një numër në formatin YYYYMMDD ose YYMMDD, për sa kohë që numri ka kuptim si datë. Për shembull, 19830905 dhe 830905 interpretohen si "1983-09-05".

Prandaj, vargu "08/25/2012" nuk është një datë e vlefshme MySQL fjalë për fjalë. Ju keni katër opsione (në një rend të paqartë preferencash, pa informacion të mëtejshëm rreth kërkesave tuaja):

    Konfiguro Datepicker për të ofruar data në një format të mbështetur duke përdorur altField së bashku me altFormat:

    $("zgjedhës").datepicker(( altFusha: "#actualDate" altFormat: "vvvv-mm-dd" ));

    Ose, nëse jeni të kënaqur që përdoruesit e shohin datën në formatin VVVV-MM-DD, thjesht vendosni parametrin dataFormat në vend të kësaj:

    $("përzgjedhës").datepicker((Formati i datës: "vvvv-mm-dd" ));

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

    dhe pastaj ose:

      merrni një varg të përshtatshëm të formatuar:

      $date = $dt->format("Y-m-d");

      merrni vulën kohore UNIX:

      $timestamp = $dt->getTimestamp();

      i cili më pas kalohet drejtpërdrejt në MySQL FROM_UNIXTIME():

      INSERT INTO VALUES datën e përdoruesit ("", "$name", FROM_UNIXTIME($timestamp))

  • Futni manualisht vargun në një literal të vlefshëm:

    $parts = shpërthejnë ("/", $_POST["data"]); $date = "$pjesë-$pjesë-$pjesë";

Paralajmërim

    Kodi juaj është i prekshëm ndaj injektimit SQL. Ju duhet të përdorni vërtet deklarata të përgatitura, ku kaloni variablat tuaja si parametra, të cilët nuk vlerësohen në SQL. Nëse nuk e dini se për çfarë po flas, ose si ta rregulloni atë, lexoni historinë e Bobby Tables.

  • Lloji DATE përdoret për vlerat me një pjesë të datës, por jo me një pjesë kohore. MySQL merr dhe shfaq vlerat DATE në formatin "YYYY-MM-DD". Gama e mbështetur është nga "1000-01-01" në "9999-12-31".

    Lloji DateTime përdoret për vlerat që përmbajnë një datë dhe një kohë. MySQL merr dhe shfaq vlerat e DateTime në formatin "YYYY-MM-DD HH:MM:SS". Gama e mbështetur është nga "1000-01-01 00:00:00" deri në "9999-12-31 23:59:59".

Më poshtë është një shembull që përdor funksionet e datës. Pyetja e mëposhtme zgjedh të gjitha të dhënat me vlerën date_col brenda 30 ditëve të fundit:

Mysql> ZGJIDH diçka NGA tbl_name WHERE TO_DAYS(TANI()) - TO_DAYS(data_col)<= 30;

Rikthen indeksin e ditës së javës për datën (0 = e hënë, 1 = e martë, ... 6 = e diel):

Mysql> ZGJIDH DITËN E JAVE ("03-02-1998 22:23:00"); -> 1 mysql> ZGJIDH DITËN E JAVE ("1997-11-05"); -> 2

DAYOFMONTH (datë)

Rikthen numrin rendor të ditës së muajit për argumentin e datës, në intervalin nga 1 në 31:

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

Rikthen numrin rendor të ditës së vitit për argumentin e datës, në rangun nga 1 në 366:

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

Rikthen numrin serial të muajit në vit për argumentin e datës, duke filluar nga 1 në 12:

Mysql> ZGJIDH MUAJIN("1998-02-03"); -> 2

Kthen emrin e ditës së javës për argumentin e datës:

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

Kthen emrin e muajit për argumentin e datës:

Mysql> SELECT MONTHNAME("1998-02-05"); -> "shkurt"

Rikthen numrin e tremujorit të vitit për argumentin e datës, duke filluar nga 1 në 4:

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

JAVA (data) , JAVA (data, e para)

Duke pasur parasysh një argument, kthen numrin rendor të javës në vit për datën, duke filluar nga 0 në 53 (po, ndoshta fillimi i javës së 53-të) për rajonet ku e diela konsiderohet dita e parë e javës. Formulari WEEK() me dy argumente ju lejon të specifikoni nëse java fillon të dielën ose të hënën. Rezultati do të jetë në intervalin 0-53 ose 1-52.

Ja se si funksionon argumenti i dytë:

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

Shënim: Në versionin 4.0, funksioni WEEK(#,0) u ndryshua për t'u përshtatur me kalendarin amerikan.

Vini re se nëse java është java e fundit e vitit të kaluar, MySQL do të kthejë 0 nëse nuk specifikoni 2 ose 3 si një argument opsional:

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

Mund të supozojmë se MySQL duhet të kthejë 52 sepse kjo datë është java e 52-të e vitit 1999. Ne vendosëm të kthejmë 0 sepse duam që funksioni të japë "numrin e javës në vitin e specifikuar". Kjo e bën funksionin WEEK() më të besueshëm kur përdoret së bashku me funksione të tjera që llogaritin pjesë të datave.

Nëse ende ju intereson javën e duhur të vitit, atëherë mund të përdorni 2 ose 3 si një argument opsional, ose të përdorni YEARWEEK()

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

Kthen vitin për datën në intervalin 1000 deri në 9999:

Mysql> ZGJIDH VITIN ("98-02-03"); -> 1998

YEARWEEK (data) , YEARWEEK (data, e para)

Kthen vitin dhe javën për argumentin e datës. Argumenti i dytë i këtij funksioni funksionon ngjashëm me argumentin e dytë të funksionit WEEK(). Vini re se viti mund të ndryshojë nga data e specifikuar për javët e para dhe të fundit të vitit:

Mysql> ZGJIDH VITIN JAVE ("1987-01-01"); -> 198653

Vini re se numri i javës është i ndryshëm nga ai që kthen WEEK() (0) kur thirret me argumentin opsional 0 ose 1. Kjo ndodh sepse WEEK() kthen numrin e javës në vitin e specifikuar.

Rikthen orën për argumentin e kohës, duke filluar nga 0 në 23:

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

Rikthen numrin e minutave për argumentin e kohës, duke filluar nga 0 në 59:

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

Rikthen numrin e sekondave për argumentin e kohës, duke filluar nga 0 në 59:

Mysql> ZGJIDH DYTËN("10:05:03"); -> 3

Shton N muaj në periudhën P (në formatin YYMM ose YYYYMM). Kthen një vlerë në formatin YYYYMM. Vini re se argumenti i periudhës P nuk është një vlerë datë:

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

PERIOD_DIFF (P1, P2)

Rikthen numrin e muajve ndërmjet periudhave P1 dhe P2. P1 dhe P2 duhet të jenë në formatin YYMM ose YYYYMM. Vini re se argumentet e periudhës P1 dhe P2 nuk janë vlera datë:

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

DATE_ADD (data, lloji i eksprimit INTERVAL) , DATE_SUB (data, lloji i eksprimit INTERVAL) , ADDDATE (data, lloji i eksprimit INTERVAL) , SUBDATE (data, lloji i eksprimit INTERVAL)

Këto funksione kryejnë veprime aritmetike në data. Të dyja janë të reja në MySQL 3.22. Funksionet ADDDATE() dhe SUBDATE() janë sinonime për DATE_ADD() dhe DATE_SUB(). Në MySQL 3.23, ju mund të përdorni operatorët + dhe - në vend të funksioneve DATE_ADD() dhe DATE_SUB() nëse shprehja e djathtë është një kolonë e tipit DATE ose DATETIME (shih shembullin më poshtë). Argumenti data është një vlerë DATETIME ose DATE që specifikon datën e fillimit.

Shprehja expr specifikon sasinë e intervalit për të shtuar ose zbritur nga data e fillimit. Shprehja expr është një varg që mund të fillojë me - për vlerat e intervalit negativ. Fjala kyçe tip tregon se si duhet interpretuar një shprehje e dhënë. Funksioni ndihmës EXTRACT(lloji FROM data) kthen një interval të llojit (llojit) të specifikuar nga një vlerë datë. Tabela e mëposhtme tregon marrëdhënien midis argumenteve tip dhe expr:

Kuptimi Lloji Formati i pritur ekspr
E DYTË SEKONDA
MINUTE MINUTAT
ORË ORË
DITA DITË
MUAJ MUAJ
VITI VITE
MINUTE_SECOND "MINUTES:SEKONDË"
HOUR_MINUTE "HOURS:MINUTES"
DAY_HOUR "DITË ORË"
YEAR_MONTH "VITE-MUAJ"
HOUR_SECOND "ORË: MINUTA: SEKONDA"
DAY_MINUTE "DITË ORË:MINUTES"
DITË_SECOND "DITË ORË:MINUTA:SEKONDAT"

Në MySQL, formati i shprehjes expr lejon çdo kufi. Kufizuesit e paraqitur në këtë tabelë janë dhënë si shembuj. Nëse data është një vlerë DATE dhe llogaritja e synuar përfshin vetëm pjesët YEAR , MUAJ , dhe DAY (d.m.th., asnjë pjesë TIME), atëherë rezultati përfaqësohet nga një vlerë DATE. Në raste të tjera, rezultati është një vlerë DATETIME:

Mysql> ZGJIDH "1997-12-31 23:59:59" + INTERVAL 1 SEKOND; -> 01-01-1998 00:00:00 mysql> ZGJIDH INTERVALIN 1 DITË + "1997-12-31"; -> 01-01-1998 mysql> ZGJIDH "1998-01-01" - INTERVALI 1 SEKOND; -> 31-12-1997 23:59:59 mysql> ZGJIDH DATE_ADD("31-12-1997 23:59:59", INTERVAL 1 SEKOND); -> 01-01-1998 00:00:00 mysql> ZGJIDH DATE_ADD("31-12-1997 23:59:59", INTERVAL 1 DITË); -> 01-01-1998 23:59:59 mysql> ZGJIDH DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 mysql> ZGJIDH DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DITA_SECOND); -> 1997-12-30 22:58:59 mysql> ZGJIDH DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 30-12-1997 14:00:00 mysql> ZGJIDH DATE_SUB("1998-01-02", INTERVAL 31 DITË); -> 02-12-1997

Nëse intervali i specifikuar është shumë i shkurtër (d.m.th., nuk përfshin të gjitha pjesët e intervalit të pritur nga fjala kyçe e tipit të specifikuar), atëherë MySQL supozon se pjesët më të majta të intervalit janë hequr. Për shembull, nëse argumenti i tipit është DAY_SECOND, atëherë shprehja e pritur expr duhet të ketë pjesët e mëposhtme: ditë, orë, minuta dhe sekonda. Nëse e specifikoni vlerën e intervalit si "1:10" në këtë rast, MySQL supozon se ditët dhe orët janë hequr dhe se vlera përfshin vetëm minutat dhe sekondat. Me fjalë të tjera, kombinimi "1:10" DAY_SECOND interpretohet si i barabartë me "1:10" MINUTE_SECOND . MySQL interpreton vlerat TIME në një mënyrë të ngjashme - duke përfaqësuar kohën e kaluar dhe jo kohën e ditës. Ju lutemi vini re se kur shtoni ose zbritni operacione që përfshijnë një vlerë DATE dhe një shprehje që përmban një pjesë kohore, kjo vlerë DATE do të konvertohet automatikisht në një vlerë të tipit DATETIME:

Mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 DITE); -> 02-01-1999 mysql> SELECT DATE_ADD("1999-01-01", INTERVAL 1 ORË); -> 01-01-1999 01:00:00

Nëse përdorni vlera të pasakta të datës, rezultati do të jetë NULL. Nëse, kur përmbledhim MONTH , YEAR_MONTH ose YEAR, numri i ditës në datën që rezulton tejkalon numrin maksimal të ditëve në muajin e ri, atëherë numri i ditës së datës që rezulton caktohet në ditën e fundit të muajit të ri:

Mysql> SELECT DATE_ADD("1998-01-30", INTERVAL 1 MUAJ); -> 28-02-1998

Nga shembulli i mëparshëm, mund të shihni se fjala INTERVAL dhe fjala kyçe tip nuk janë të ndjeshme ndaj shkronjave të vogla.

EKSTRAKT (lloji nga data)

Funksioni EXTRACT() përdor të njëjtat lloje intervalesh si funksionet DATE_ADD() ose DATE_SUB(), por EXTRACT() nxjerr një pjesë të vlerës së datës në vend që të kryejë aritmetikë.

Mysql> ZGJIDH EKSTRAKTIN (VITI NGA "1999-07-02"); -> 1999 mysql> ZGJIDH EKSTRACT (VITI_MUAJ NGA "1999-07-02 01:02:03"); -> 199907 mysql> ZGJIDH EKSTRACT(DITA_MINUTE NGA "02-07-1999 01:02:03"); -> 20102

funksioni kthen numrin e ditës për datën e specifikuar në argumentin e datës, (numri i ditëve që kanë kaluar që nga viti 0):

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

Funksioni TO_DAYS() nuk është menduar për përdorim me vlerat para prezantimit të kalendarit gregorian (1582) sepse nuk merr parasysh ditët e humbura kur kalendari është ndryshuar.

Kthen vlerën DATE për numrin e ditës së dhënë N:

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

Funksioni FROM_DAYS() nuk është i destinuar për përdorim me vlerat para prezantimit të kalendarit Gregorian (1582) sepse nuk llogarit ditët e humbura kur kalendari është ndryshuar.

DATE_FORMAT (data, formati)

Formaton vlerën e datës sipas vargut të formatit. Kualifikuesit e mëposhtëm mund të përdoren në linjën e formatit:

Përcaktues Përshkrim
%M Emri i muajit (janar...dhjetor)
%W Emri i ditës së javës (e diel...e shtunë)
%D Dita e muajit me prapashtesë angleze (0, 1, 2, 3, etj.)
%Y Viti, data, 4 shifra
%y Viti, data, 2 shifra
%X Viti për një javë ku e diela konsiderohet dita e parë e javës, numri, 4 shifra, përdoret me "%V"
%x Viti për një javë ku e diela konsiderohet dita e parë e javës, numri, 4 shifra, përdoret me "%v"
%a Emri i shkurtuar i ditës së javës (Dielli...Sat)
%d Dita e muajit, numri (00..31)
%e Dita e muajit, numri (0..31)
%m Muaji, data (00..12)
%c Muaji, data (0..12)
%b Emri i shkurtuar i muajit (Jan...Dh)
%j Dita e vitit (001..366)
%H Ora (00..23)
%k Ora (0..23)
%h Ora (01..12)
%I Ora (01..12)
%l Ora (1..12)
%i Procesverbali, numri (00..59)
%r Koha, formati 12-orësh (hh:mm:ss M)
%T Ora, formati 24-orësh (hh:mm:ss)
%S Sekonda (00..59)
%s Sekonda (00..59)
%fq Paradite apo pasdite
%w Dita e javës (0=E diel..6=E shtunë)
%U Java (00..53), ku e diela konsiderohet dita e parë e javës
%u Java (00..53), ku e hëna konsiderohet dita e parë e javës
%V Java (01..53), ku e diela konsiderohet dita e parë e javës. Përdoret me "%X"
%v Java (01..53), ku e hëna konsiderohet dita e parë e javës. Përdoret me "%x"
%% Fjalë për fjalë "%".

Të gjithë personazhet e tjerë thjesht kopjohen në shprehjen që rezulton pa interpretim:

Mysql> SELECT DATE_FORMAT("1997-10-04 22:23:00", "%W %M %Y"); -> "Saturday Tetor 1997" 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"

Në MySQL 3.23, karakteri "%" duhet t'i paraprijë karaktereve të specifikuesit të formatit. Në versionet e mëparshme të MySQL, karakteri "%" është opsional.

Arsyeja që intervalet mujore dhe ditore fillojnë me zero është se MySQL lejon data të pjesshme si "2004-00-00" që nga MySQL 3.23.

TIME_FORMAT (koha, formati)

Ky funksion përdoret në mënyrë të ngjashme me funksionin DATE_FORMAT() të përshkruar më sipër, por vargu i formatit mund të përmbajë vetëm specifikues formati që lidhen me orët, minutat dhe sekondat. Kur specifikoni kualifikues të tjerë, vlera NULL ose 0 do të kthehet.

CURDATE() , CURRENT_DATE

E kthen datën e sotme si vlerë në formatin VYYY-MM-DD ose YYYYMMDD, në varësi të faktit nëse funksioni përdoret në një varg ose kontekst numerik:

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

CURTIME() , CURRENT_TIME

E kthen kohën aktuale si vlerë në formatin HH:MM:SS ose HHMMS, në varësi të faktit nëse funksioni përdoret në një varg ose kontekst numerik:

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

TANI() , SYSDATE() , CURRENT_TIMESTAMP

Kthen datën dhe orën aktuale si vlerë në formatin VYYY-MM-DD HH:MM:SS ose YYYYMMDDHHMMSS, në varësi të faktit nëse funksioni përdoret në një varg ose kontekst numerik:

Mysql> ZGJIDH TANI(); -> "15-12-1997 23:50:26" mysql> ZGJEDH TANI() + 0; -> 19971215235026

Vini re se TANI () vlerësohet vetëm një herë për secilën kërkesë, domethënë në fillim të ekzekutimit të saj. Kjo siguron që referenca të shumta në NOW() brenda të njëjtit pyetje do të prodhojnë të njëjtën vlerë.

UNIX_TIMESTAMP() , UNIX_TIMESTAMP(datë)

Kur thirret pa argument, ky funksion kthen vulën kohore UNIX_TIMESTAMP (sekonda që nga 1970-01-01 00:00:00 GMT) si një numër të plotë të panënshkruar. Nëse funksioni UNIX_TIMESTAMP() thirret me një argument datë, ai kthen vlerën e argumentit si numër sekondash që nga 1970-01-01 00:00:00 GMT. Argumenti i datës mund të jetë një varg DATE, një varg DATETIME, një vlerë TIMESTAMP ose një numër në formatin e orës lokale YYMMDD ose YYYYMMDD:

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

Kur përdorni funksionin UNIX_TIMESTAMP në një kolonë TIMESTAMP, ky funksion do të kthejë drejtpërdrejt vlerën e vulës kohore të brendshme, pa konvertimin e nënkuptuar të vargut në një vulë kohore (``string-to-unix-timestamp''). Nëse data e dhënë është jashtë intervalit të vlefshëm, atëherë funksioni UNIX_TIMESTAMP() do të kthejë 0, por kini parasysh se kryhet vetëm një kontroll bazë (viti 1970-2037, muaji 01-12, dita 01-31). Nëse ju duhet të kryeni zbritjen e kolonës UNIX_TIMESTAMP(), rezultati mund të konvertohet në numra të plotë të nënshkruar. Shih seksionin 6.3.5, “Lloji i funksioneve të derdhjes”.

FROM_UNIXTIME (unix_stamp)

Kthen një paraqitje të argumentit unix_timestamp si një vlerë në formatin YYYY-MM-DD HH:MM:SS ose YYYYMMDDHHMMSS, në varësi të faktit nëse funksioni përdoret në një varg ose kontekst numerik:

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

FROM_UNIXTIME (vulë_kohore unix, format)

Kthen një paraqitje të vargut të argumentit unix_timestamp, të formatuar sipas vargut të formatit. Vargu i formatit mund të përmbajë të njëjtët kualifikues që janë renditur në përshkrimin për funksionin DATE_FORMAT():

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

SEC_TO_TIME (sekonda)

Rikthen argumentin e sekondave, të konvertuar në orë, minuta dhe sekonda, si një vlerë në formatin HH:MM:SS ose HHMMSS, në varësi të faktit nëse funksioni përdoret në një varg ose kontekst numerik:

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

TIME_TO_SEC (kohë)

Kthen argumentin e kohës të konvertuar në sekonda:

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


publikimi i këtij artikulli lejohet vetëm me një lidhje në faqen e internetit të autorit të artikullit

Siç e dini, të gjitha datat ruhen në mysql në rend të kundërt vit-muaj-ditë (2008-10-18), ndonjëherë edhe pa ndarës (20081018).
Për të shfaqur datën, duhet ta shndërroni atë në një formë normale të lexueshme.

Ekzistojnë dy metoda të konvertimit, efektive dhe jo shumë efektive.
Një mënyrë joefektive është kur data e prodhimit nga mysql konvertohet duke përdorur php.
Unë personalisht e kam bërë këtë për një kohë shumë të gjatë. Përpara shfaqjes, e ktheva çdo datë duke përdorur një funksion php.
Nëse numri i transformimeve nuk është i madh, atëherë mund ta ktheni datën duke përdorur PHP, nuk ka asgjë të keqe me këtë, por nëse ju duhet të nxirrni dhjetëra ose qindra mijëra rekorde dhe të konvertoni datën në secilin, atëherë sigurisht konvertimi datat duke përdorur mysql do të jenë shumë më të shpejta.

Mysql ka një funksion të shkëlqyer DATE_FORMAT(), është shumë i ngjashëm me funksionin php date().
Këtu është një shembull i përdorimit

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

Gjithçka është shumë e thjeshtë dhe e shpejtë, nuk ka nevojë të ndryshoni datat duke përdorur php.
Këtu është një listë e përkufizimeve për këtë funksion

Përcaktues Përshkrim
%M Emri i muajit (janar...dhjetor)
%W Emri i ditës së javës (e diel...e shtunë)
%D Dita e muajit me prapashtesë angleze (0, 1, 2, 3, etj.)
%Y Viti, data, 4 shifra
%y Viti, data, 2 shifra
%X Viti për një javë ku e diela konsiderohet dita e parë e javës, numri, 4 shifra, përdoret me "%V"
%x Viti për një javë ku e diela konsiderohet dita e parë e javës, numri, 4 shifra, përdoret me "%v"
%a Emri i shkurtuar i ditës së javës (Dielli...Sat)
%d Dita e muajit, numri (00..31)
%e Dita e muajit, numri (0..31)
%m Muaji, data (00..12)
%c Muaji, data (0..12)
%b Emri i shkurtuar i muajit (Jan...Dh)
%j Dita e vitit (001..366)
%H Ora (00..23)
%k Ora (0..23)
%h Ora (01..12)
%I Ora (01..12)
%l Ora (1..12)
%i Procesverbali, numri (00..59)
%r Koha, formati 12-orësh (hh:mm:ss M)
%T Ora, formati 24-orësh (hh:mm:ss)
%S Sekonda (00..59)
%s Sekonda (00..59)
%fq Paradite apo pasdite
%w Dita e javës (0=E diel..6=E shtunë)
%U Java (00..53), ku e diela konsiderohet dita e parë e javës
%u Java (00..53), ku e hëna konsiderohet dita e parë e javës
%V Java (01..53), ku e diela konsiderohet dita e parë e javës. Përdoret me "%X"
%v Java (01..53), ku e hëna konsiderohet dita e parë e javës. Përdoret me "%x"
%% Fjalë për fjalë `%”.

Komentet

27.11.2008 ----
Hej shejtan!!!
Unë vetë kam pesë vjet që punoj në php dhe mysql, dhe gjatë gjithë kohës ndryshoja datën në php...
Nuk më ka shkuar kurrë në mendje se do të ishte më e lehtë të përdorja funksionin e integruar mysql

28.11.2008 Zheka
Po kështu! Unë e kam përdorur gjithmonë funksionin tim php

12/03/2008 Sergej
Epo, në përgjithësi, a e përdor dikush këtë qasje?
Apo të gjithë përdorin php për të ndryshuar datën?
Unë personalisht nuk kam ndryshuar kurrë një datë në mysql, unë ende bëj gjithçka në php

28/06/2009 Ilya
Fatkeqësisht, asgjë nuk funksionoi :(

07/08/2009 Vitaly
E bukur, faleminderit për veçorinë. Pyes veten se çfarë squiggles të tjera ka?

14.07.2009 DSaint
Faleminderit, ka ndihmuar shumë. E tëra që mbetet është të shfaqni emrin e muajit në Rusisht)

28/07/2009 Vlad
mysql=>PHP
zgjidhni unix_timestamp(start_date) si start_date_php
php-kodi
data ("d.m.Y", $row["start_date_php"])

PHP=>MySQL
grupi i përditësimit të tabelës start_date=DATE_FORMAT(STR_TO_DATE("12/19/2009 6:35:22 PM","%d.%m.%Y %H:%i"),"%Y.%m.%d % H:% i")

18.08.2009 I ftuar
2: DSi
Ekziston një funksion kaq i mrekullueshëm:
ELT (MUAJ ("2004-04-10"), "Jan."," Shkurt," "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht."," Shtator.""Tet.","Nëntor","Dhjetor")

Perdore. :-)

29.10.2009 Vladimir
Faleminderit, për ELT (MUAJ ("2004-04-10"), "Jan.", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht" ""Shtator.","Tet.","Nëntor","Dhjetor")
nuk kam degjuar.

10/07/2010 Evgeniy
Çfarë funksionon më shpejt? Konvertimi në kërkesë, apo si rezultat i funksionit PHP?

10/07/2010 mbrojtës
Në minimum, ka më pak memorie për të përpunuar, më pak thirrje funksionesh, më pak alokime memorie... Unë përdor vazhdimisht diçka të tillë, por jo në mysql, por në postgresql.

10/08/2010 Admin
Evgeniy, mbrojtësi tha saktë se ky transformim duhet të funksionojë më bukur përmes bazës së të dhënave, por sigurisht, nëse po flasim për nxjerrjen e një sasie të madhe të dhënash.
Nëse tërheq 10-20 rekorde, atëherë nuk ka dallim se si të konvertohet data në krahasim me ngarkesat e tjera, kjo është një gjë e vogël.

27.01.2011 pcemma
uhh falë afftor (: nuk ka më nevojë të përdor funksionin tim mega cool për konvertim (:

13.04.2011 Xes
SI TA PËRDORNI NË PHP
ndërsa ($sqlr=mysql_fetch_array($sql))
{
echo ($sqlr["comadd"]." ".$sqlr["koment"]."

");

$sqlr["comadd"] - A duhet ta prezantoni në formë normale?
}

14.04.2011 Vitaly
Unë kam një datë në bazën e të dhënave në formatin 19/11/2008, lloji i tabelës VARCHAR, si mund ta rishkruaj në bazën e të dhënave në formatin 2008-11-19?
Duart për një kohë shumë të gjatë ...
Faleminderit.

15.04.2011 admin
Xes është një funksion MySQL, duhet ta përdorni në një pyetje sql, e cila, duke gjykuar nga kodi juaj, ndodhet diku më lart. Nuk mund të përdoret në këtë seksion të kodit.

15.04.2011 admin
Vitaly, thjesht ndryshoni llojin e qelizës në DATE, mysql do t'i konvertojë automatikisht të gjitha të dhënat në këtë qelizë në formatin 2008-11-19.
Por për çdo rast, përpara se të ndryshoni llojin e qelizës, bëni një hale të kësaj tabele, sepse papritmas baza e të dhënave do të bëjë diçka të gabuar dhe tabela do të prishet fare.

Nëse është e rëndësishme për ju që të lini llojin e fushës si varchar, atëherë pasi të vendosni llojin DATE, vendoseni përsëri në varchar...

Ky është opsioni më i thjeshtë, por jo plotësisht i saktë, por kontrollova se funksionon.

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

24.05.2011 Konstantin
dhe unë marr gjithmonë SELECT *,UNIX_TIMESTAMP(krijuar) AS krijuar nga...
Por me një motor mund ta bëj në çdo format. Edhe vetëm një ditë, edhe vetëm një kohë...
dhe krahasoni cila është më e madhe se 14.05.2011 ose 14.05.2010...
Dhe unë e shkruaj kështu:
...date=".gmdate("Y-m-d H:i:s",$krijuar)...
dhe në përgjithësi, nuk shoh arsye për të ndryshuar zakonet

24.05.2011 Sergej
Konstantin, unë vetë përdor php date() për dalje, por këtu po shqyrtojmë mundësinë e konvertimit të datës jo përmes php, por përmes mysql.

Unë do të thoja që kjo është vetëm një pasqyrë e funksionit mysql dhe sigurisht që ka të drejtë të ekzistojë...




Top