MYSQL: Date e orari Da Link italiano: http://www.mrwebmaster.it/mysql/gestione-date-orari_9727.html MySQL è molto generoso in merito alla gestione di date e orari, sono infatti davvero tante le funzioni interne che il DBMS mette a nostra disposizione per trattare con questo particolare tipo di dato. In questa sede non è possibile passarle in rassegna una ad una, ma ci limiteremo a vedere le più importanti e comunemente tilizzate. Data e orario corrente Tra queste sicuramente vanno menzionate le funzioni per l'ottenimento di data e ora corrente: NOW(), CURDATE() e CURTIME(). Funzione Formato della risposta NOW() AAAA-MM-GG HH:MM:SS CURDATE() AAAAA-MM-GG CURTIME() HH:MM:SS Per fare un esempio si ipotizzi di voler inserire la data corrente all'interno del campo "data" di una tabella "calendario": INSERT INTO calendario (data) VALUES (CURDATE()) Operazioni sulle date Altre funzioni di grande importanza nella gestione delle date sono le funzioni per la somma e la sottrazione del tempo. Nella tabella che segue vediamo le principali: Funzione DATE_ADD() DATE_SUB() PERIOD_ADD() Utilizzo DATE_ADD(data, INTERVAL espressione tipo) DATE_SUBB(data, INTERVAL espressione tipo) PERIOD_ADD(Periodo, Mesi) il Periodo va espresso informato AAAAMM oppure AAMM PERIOD_SUBB() PERIOD_SUB(Periodo1, Periodo2) il Periodo va espresso informato AAAAMM oppure AAMM Di seguito alcuni esempi: Supponiamo di voler sommare 10 giorni alla data corrente: SELECT DATE_ADD(CURDATE(),INTERVAL 10 DAYS); Effetuiamo la sottrazione di 2 mesi da una data specifica: SELECT DATE_SUB('2015-04-15',INTERVAL 2 MONTHS); Aggiungiamo 7 mesi al mese di aprile 2015: SELECT PERIOD_ADD(201504,7); Togliamo 3 mesi al mese di gennaio 2015: SELECT PERIOD_ADD(201501,-3); Calcoliamo la differenza (espressa in mesi) tra il gennaio 2015 ed ottobre 2012: SELECT PERIOD_SUB(201501,201210); Per finire una breve precisazione: quelle viste fin qui non sono che una piccola parte delle funzioni interne che MySQL prevede per la gestione di date e orari. Vi rimando quindi alla documentazione ufficiale per vedere le (tante) altre funzioni che, sono certo, vi torneranno spesso utili nello sviluppo di applicazioni pratiche. Formattare date e orari Altre due interessanti funzioni di MySQl sono DATE_FORMAT() e TIME_FORMAT() le quali servono, rispettivamente, per formattare una data e un orario. Queste due funzioni, che si comportano in modo analogo, richiedono due argomenti: il primo è la data da formattare; il secondo è una stringa composta da alcuni caratteri speciali, preceduti dal simbolo "%" la quale svolge la funzione di "modello" per la risposta. Vediamo di seguito quali sono questi caratteri speciali: %d - giorno del mese numerico 00…31 %M - nome del mese January ... December %m - mese numerico 00 ... 12 %H - ora 00 ... 23 %i - minuti 00 ... 59 %s - secondi 00 ... 59 %Y - anno di quattro cifre %y - anno di due cifre Vediamo un esempio di utilizzo di DATE_FORMAT(): SELECT DATE_FORMAT('2015-04-15 14:33:23','%d-%m-%Y alle ore %H'); La risposta prodotta da MySQL sarà: 15-04-2015 alle ore 15 Da Link in inglese: http://www.w3schools.com/sql/sql_dates.asp SQL Dates The most difficult part when working with dates is to be sure that the format of the date trying to insert, matches the format of the date column in the database. As long as your data contains only the date portion, your queries will work as expected. However, if a time portion is involved, it gets complicated. Before talking about the complications of querying for dates, we will look at the most important built-in functions for working with dates. MySQL Date Functions The following table lists the most important built-in date functions in MySQL: Function Description NOW() Returns the current date and time CURDATE() Returns the current date CURTIME() Returns the current time DATE() Extracts the date part of a date or date/time expression EXTRACT() Returns a single part of a date/time DATE_ADD() Adds a specified time interval to a date DATE_SUB() Subtracts a specified time interval from a date DATEDIFF() Returns the number of days between two dates DATE_FORMAT() Displays date/time data in different formats SQL Server Date Functions The following table lists the most important built-in date functions in SQL Server: Function Description GETDATE() Returns the current date and time DATEPART() Returns a single part of a date/time DATEADD() Adds or subtracts a specified time interval from a date DATEDIFF() Returns the time between two dates CONVERT() Displays date/time data in different formats SQL Date Data Types MySQL comes with the following data types for storing a date or a date/time value in the database: DATE - format YYYY-MM-DD DATETIME - format: YYYY-MM-DD HH:MI:SS TIMESTAMP - format: YYYY-MM-DD HH:MI:SS YEAR - format YYYY or YY SQL Server comes with the following data types for storing a date or a date/time value in the database: DATE - format YYYY-MM-DD DATETIME - format: YYYY-MM-DD HH:MI:SS SMALLDATETIME - format: YYYY-MM-DD HH:MI:SS TIMESTAMP - format: a unique number Note: The date types are chosen for a column when you create a new table in your database! For an overview of all data types available, go to our complete Data Types reference. SQL Working with Dates You can compare two dates easily if there is no time component involved! Assume we have the following "Orders" table: OrderId ProductName OrderDate 1 Geitost 2008-11-11 2 Camembert Pierrot 2008-11-09 3 Mozzarella di Giovanni 2008-11-11 4 Mascarpone Fabioli 2008-10-29 Now we want to select the records with an OrderDate of "2008-11-11" from the table above. We use the following SELECT statement: SELECT * FROM Orders WHERE OrderDate='2008-11-11' The result-set will look like this: OrderId ProductName OrderDate 1 Geitost 2008-11-11 3 Mozzarella di Giovanni 2008-11-11 Now, assume that the "Orders" table looks like this (notice the time component in the "OrderDate" column): OrderId ProductName OrderDate 1 Geitost 2008-11-11 13:23:44 2 Camembert Pierrot 2008-11-09 15:45:21 3 Mozzarella di Giovanni 2008-11-11 11:12:01 4 Mascarpone Fabioli 2008-10-29 14:56:59 If we use the same SELECT statement as above: SELECT * FROM Orders WHERE OrderDate='2008-11-11' we will get no result! This is because the query is looking only for dates with no time portion. Tip: If you want to keep your queries simple and easy to maintain, do not allow time components in your dates! Da Reference GuideLink lista funzioni: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_get-format his section describes the functions that can be used to manipulate temporal values. See Section 11.3, “Date and Time Types”, for a description of the range of values each date and time type has and the valid formats in which values may be specified. Table 12.13 Date/Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one timezone to another CURDATE() Return the current date CURRENT_DATE(), CURRENT_DATE Synonyms for CURDATE() CURRENT_TIME(), CURRENT_TIME Synonyms for CURTIME() CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP Synonyms for NOW() CURTIME() Return the current time DATE_ADD() Add time values (intervals) to a date value DATE_FORMAT() Format date as specified DATE_SUB() Subtract a time value (interval) from a date DATE() Extract the date part of a date or datetime expression DATEDIFF() Subtract two dates DAY() Synonym for DAYOFMONTH() DAYNAME() Return the name of the weekday DAYOFMONTH() Return the day of the month (0-31) DAYOFWEEK() Return the weekday index of the argument DAYOFYEAR() Return the day of the year (1-366) EXTRACT() Extract part of a date FROM_DAYS() Convert a day number to a date FROM_UNIXTIME() Format UNIX timestamp as a date Name Description GET_FORMAT() Return a date format string HOUR() Extract the hour LAST_DAY Return the last day of the month for the argument LOCALTIME(), LOCALTIME Synonym for NOW() LOCALTIMESTAMP,LOCALTIMESTAMP() Synonym for NOW() MAKEDATE() Create a date from the year and day of year MAKETIME() Create time from hour, minute, second MICROSECOND() Return the microseconds from argument MINUTE() Return the minute from the argument MONTH() Return the month from the date passed MONTHNAME() Return the name of the month NOW() Return the current date and time PERIOD_ADD() Add a period to a year-month PERIOD_DIFF() Return the number of months between periods QUARTER() Return the quarter from a date argument SEC_TO_TIME() Converts seconds to 'HH:MM:SS' format SECOND() Return the second (0-59) STR_TO_DATE() Convert a string to a date SUBDATE() Synonym for DATE_SUB() when invoked with three arguments SUBTIME() Subtract times SYSDATE() Return the time at which the function executes TIME_FORMAT() Format as time TIME_TO_SEC() Return the argument converted to seconds TIME() Extract the time portion of the expression passed TIMEDIFF() Subtract time TIMESTAMP() With a single argument, this function returns the date or datetime expression; with two arguments, the sum of the arguments Name Description TIMESTAMPADD() Add an interval to a datetime expression TIMESTAMPDIFF() Subtract an interval from a datetime expression TO_DAYS() Return the date argument converted to days TO_SECONDS() Return the date or datetime argument converted to seconds since Year 0 UNIX_TIMESTAMP() Return a UNIX timestamp UTC_DATE() Return the current UTC date UTC_TIME() Return the current UTC time UTC_TIMESTAMP() Return the current UTC date and time WEEK() Return the week number WEEKDAY() Return the weekday index WEEKOFYEAR() Return the calendar week of the date (1-53) YEAR() Return the year YEARWEEK() Return the year and week