Le MySQL STR_TO_DATE()
La fonction vous permet de construire une valeur de date à partir des différentes parties de date.
Lorsque vous utilisez cette fonction, vous fournissez une chaîne des différentes parties de date et un deuxième argument qui spécifie le format dans lequel la date est fournie.
Syntaxe
La syntaxe ressemble à ceci :
STR_TO_DATE(chaîne,format)
Où str
est la chaîne qui contient les parties de date, et format est la chaîne de format (détermine comment la str
l'argument est formaté).
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Résultat :
+--------------------------------------------------+| STR_TO_DATE('31,12,1999','%d,%m,%Y') |+------------------------------- -----------+| 1999-12-31 |+--------------------------------------------------+
Exemple 2 - Ordre de la chaîne de format
La chaîne de format doit correspondre aux valeurs fournies dans la chaîne de date. Par exemple, vous ne pouvez pas effectuer les actions suivantes :
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Résultat :
+--------------------------------------------------+| STR_TO_DATE('31,12,1999','%m,%d,%Y') |+------------------------------- -----------+| NULL |+-------------------------------------------+
La raison pour laquelle cela n'a pas fonctionné est que nous essayons de forcer le mois à avoir une valeur de 31, mais il n'y a que 12 mois dans une année. Cela entraînerait donc une valeur de date invalide.
Par conséquent, vous devrez être prudent lorsque vous utilisez cette fonction, en particulier lorsque la valeur du jour est de 12 ou moins, sinon vous pourriez vous retrouver avec les valeurs de mois et de jour échangées sans vous en apercevoir.
Par exemple, comme ceci :
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');Résultat :
+--------------------------------------------------+------- -------------------------------+| STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') |+------------------------------- -----------+-------------------------------------------------- +| 1999-12-07 | 1999-07-12 |+--------------------------------------------------+---- ----------------------------------+Dans ce cas, nous n'obtenons pas une valeur NULL comme dans l'exemple précédent, car les deux
07
et12
peut être un jour ou un mois.Exemple 3 - Correspondance de la chaîne de format
Même si la chaîne de format est dans le bon ordre, elle doit également correspondre au format des parties de date fournies dans le premier argument.
Ainsi, par exemple, vous ne pouvez pas faire ceci :
SELECT STR_TO_DATE('31 décembre 1999','%d,%m,%Y');Résultat :
+---------------------------------------------+| STR_TO_DATE('31 décembre 1999','%d,%m,%Y') |+---------------------------- ------------+| NULL |+---------------------------------------------+Dans ce cas, nous aurions besoin de faire quelque chose comme ceci :
SELECT STR_TO_DATE('31 décembre 1999','%d %M, %Y');Résultat :
+-------------------------------------------------------+| STR_TO_DATE('31 décembre 1999','%d %M, %Y') |+------------------------- ------------+| 1999-12-31 |+-------------------------------------------------------+Exemple 4 - Utilisation de la fonction GET_FORMAT()
Vous pouvez également passer le
GET_FORMAT()
fonctionner comme second argument.Voici un exemple.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));Résultat :
+------------------------------------------------------------ ------+| STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) |+--------------------------------------------- ---------------------+| 1999-12-07 |+------------------------------------------------------- ---------+Exemple 5 - Valeurs DateHeure
Vous pouvez également utiliser cette fonction pour renvoyer une valeur d'heure ou de date/heure.
Voici un exemple utilisant une valeur datetime.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');Résultat :
+------------------------------------------------------------ ----------+| STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') |+-------------- ------------------------------------------+| 1999-12-31 09:30:17 |+-------------------------------------------------- ------------------+Spécificateurs de chaîne de format
Les spécificateurs suivants peuvent être utilisés dans la chaîne de format. En plus de cela, vous pouvez également utiliser des chaînes littérales dans la chaîne de format.
Spécificateur | Description |
---|---|
%a | Nom abrégé du jour de la semaine (Sun ..Sat ) |
%b | Nom abrégé du mois (Jan ..Dec ) |
%c | Mois, numérique (0 ..12 ) |
%D | Jour du mois avec suffixe anglais (0th , 1st , 2nd , 3rd , …) |
%d | Jour du mois, numérique (00 ..31 ) |
%e | Jour du mois, numérique (0 ..31 ) |
%f | Microsecondes (000000 ..999999 ) |
%H | Heure (00 ..23 ) |
%h | Heure (01 ..12 ) |
%I | Heure (01 ..12 ) |
%i | Minutes, numérique (00 ..59 ) |
%j | Jour de l'année (001 ..366 ) |
%k | Heure (0 ..23 ) |
%l | Heure (1 ..12 ) |
%M | Nom du mois (January ..December ) |
%m | Mois, numérique (00 ..12 ) |
%p | AM ou PM |
%r | Heure, 12 heures (hh:mm:ss suivi de AM ou PM ) |
%S | Secondes (00 ..59 ) |
%s | Secondes (00 ..59 ) |
%T | Heure, 24 heures (hh:mm:ss ) |
%U | Semaine (00 ..53 ), où dimanche est le premier jour de la semaine ; WEEK() mode 0 |
%u | Semaine (00 ..53 ), où lundi est le premier jour de la semaine ; WEEK() mode 1 |
%V | Semaine (01 ..53 ), où dimanche est le premier jour de la semaine ; WEEK() mode 2 ; utilisé avec %X |
%v | Semaine (01 ..53 ), où lundi est le premier jour de la semaine ; WEEK() mode 3 ; utilisé avec %x |
%W | Nom du jour de la semaine (Sunday ..Saturday ) |
%w | Jour de la semaine (0 =dimanche..6 =Samedi) |
%X | Année de la semaine où dimanche est le premier jour de la semaine, numérique, quatre chiffres ; utilisé avec %V |
%x | Année de la semaine, où lundi est le premier jour de la semaine, numérique, quatre chiffres ; utilisé avec %v |
%Y | Année, numérique, quatre chiffres |
%y | Année, numérique (deux chiffres) |
%% | Un % littéral personnage |
% | x , pour tout "x ” non listé ci-dessus |