MySQL STR_TO_DATE()
funktionen giver dig mulighed for at bygge en datoværdi ud fra de forskellige datodele.
Når du bruger denne funktion, angiver du en streng af de forskellige datodele og et andet argument, der specificerer det format, som datoen er angivet i.
Syntaks
Syntaksen ser sådan ud:
STR_TO_DATE(str,format)
Hvor str
er strengen, der indeholder datodelene, og format er formatstrengen (bestemmer, hvordan str
argumentet er formateret).
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Resultat:
+---------------------------------------------+| STR_TO_DATE('31,12,1999','%d,%m,%Y') |+-------------------------------- -----------+| 1999-12-31 |+----------------------------------------------+
Eksempel 2 – Rækkefølgen af formatstrengen
Formatstrengen skal matche værdierne i datostrengen. Du kan f.eks. ikke gøre følgende:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Resultat:
+---------------------------------------------+| STR_TO_DATE('31,12,1999','%m,%d,%Y') |+-------------------------------- -----------+| NULL |+----------------------------------------------+
Grunden til at dette ikke virkede, er fordi vi forsøger at tvinge måneden til at have en værdi på 31, men der er kun 12 måneder i et år. Så dette ville resultere i en ugyldig datoværdi.
Derfor skal du være forsigtig, når du bruger denne funktion, især når dagsværdien er 12 eller mindre, ellers kan du ende med, at måneds- og dagværdierne bliver byttet rundt uden at bemærke det.
For eksempel sådan her:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');Resultat:
+---------------------------------------------+------- --------------------------------------+| STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') |+-------------------------------- ----------------------------------------------- +| 1999-12-07 | 1999-07-12 |+---------------------------------------------+---- ----------------------------------+I dette tilfælde får vi ikke en NULL-værdi som i det foregående eksempel, fordi både
07
og12
kunne være enten en dag eller en måned.Eksempel 3 – Matchning af formatstrengen
Selvom formatstrengen er i den rigtige rækkefølge, skal den også matche formatet på datodelene, der er angivet i det første argument.
Så for eksempel kan du ikke gøre dette:
SELECT STR_TO_DATE('31. december, 1999','%d,%m,%Y');Resultat:
+----------------------------------------+| STR_TO_DATE('31. december, 1999','%d,%m,%Y') |+-------------------------------- ------------+| NULL |+----------------------------------------+I dette tilfælde skal vi gøre noget som dette:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');Resultat:
+------------------------------------------------+| STR_TO_DATE('31. december, 1999','%d %M, %Y') |+----------------------------------- ------------+| 1999-12-31 |+------------------------------------------------+Eksempel 4 – Brug af GET_FORMAT()-funktionen
Du kan også videregive
GET_FORMAT()
fungere som det andet argument.Her er et eksempel.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));Resultat:
+---------------------------------------------- ------+| STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) |+------------------------------------- ----------------------+| 1999-12-07 |+---------------------------------------------------- ----------+Eksempel 5 – Dato-tidsværdier
Du kan også bruge denne funktion til at returnere en værdi for tid eller dato.
Her er et eksempel, der bruger en datetime-værdi.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');Resultat:
+------------------------------------------------------ ----------+| STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') |+-------- ------------------------------------------+| 1999-12-31 09:30:17 |+------------------------------------------------ ------------------+Formatstrengspecifikationer
Følgende specifikationer kan bruges i formatstrengen. Ud over disse kan du også bruge bogstavelige strenge i formatstrengen.
Specifier | Beskrivelse |
---|---|
%a | Forkortet ugedagsnavn (Sun ..Sat ) |
%b | Forkortet månedsnavn (Jan ..Dec ) |
%c | Måned, numerisk (0 ..12 ) |
%D | Dag i måneden med engelsk suffiks (0th , 1st , 2nd , 3rd , …) |
%d | Dag i måneden, numerisk (00 ..31 ) |
%e | Dag i måneden, numerisk (0 ..31 ) |
%f | Mikrosekunder (000000 ..999999 ) |
%H | Time (00 ..23 ) |
%h | Time (01 ..12 ) |
%I | Time (01 ..12 ) |
%i | Minutter, numerisk (00 ..59 ) |
%j | Dag i året (001 ..366 ) |
%k | Time (0 ..23 ) |
%l | Time (1 ..12 ) |
%M | Månedens navn (January ..December ) |
%m | Måned, numerisk (00 ..12 ) |
%p | AM eller PM |
%r | Tid, 12 timer (hh:mm:ss efterfulgt af AM eller PM ) |
%S | Sekunder (00 ..59 ) |
%s | Sekunder (00 ..59 ) |
%T | Tid, 24 timer (hh:mm:ss ) |
%U | Uge (00 ..53 ), hvor søndag er den første dag i ugen; WEEK() tilstand 0 |
%u | Uge (00 ..53 ), hvor mandag er den første dag i ugen; WEEK() tilstand 1 |
%V | Uge (01 ..53 ), hvor søndag er den første dag i ugen; WEEK() tilstand 2; brugt med %X |
%v | Uge (01 ..53 ), hvor mandag er den første dag i ugen; WEEK() tilstand 3; brugt med %x |
%W | Ugedagsnavn (Sunday ..Saturday ) |
%w | Ugedag (0 =søndag..6 =lørdag) |
%X | År for ugen, hvor søndag er den første dag i ugen, numerisk, fire cifre; bruges med %V |
%x | År for ugen, hvor mandag er den første dag i ugen, numerisk, fire cifre; brugt med %v |
%Y | Årtal, numerisk, fire cifre |
%y | År, numerisk (to cifre) |
%% | En bogstavelig % tegn |
% | x , for enhver "x ” ikke angivet ovenfor |