Il STR_TO_DATE()
di MySQL la funzione ti consente di creare un valore di data dalle varie parti della data.
Quando usi questa funzione, fornisci una stringa delle varie parti della data e un secondo argomento che specifica il formato in cui è fornita la data.
Sintassi
La sintassi è questa:
STR_TO_DATE(str,format)
Dove str
è la stringa che contiene le parti della data e format è la stringa di formato (determina come il str
l'argomento è formattato).
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Risultato:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%d,%m,%Y') | +--------------------------------------+ | 1999-12-31 | +--------------------------------------+
Esempio 2 – Ordine della stringa di formato
La stringa di formato deve corrispondere ai valori forniti nella stringa di data. Ad esempio, non puoi fare quanto segue:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Risultato:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%m,%d,%Y') | +--------------------------------------+ | NULL | +--------------------------------------+
Il motivo per cui questo non ha funzionato è perché stiamo cercando di forzare il mese ad avere un valore di 31, ma ci sono solo 12 mesi in un anno. Quindi questo risulterebbe in un valore di data non valido.
Pertanto dovrai fare attenzione quando usi questa funzione, specialmente quando il valore del giorno è 12 o meno, altrimenti potresti finire con lo scambio dei valori del mese e del giorno senza accorgertene.
Ad esempio, in questo modo:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');
Risultato:
+--------------------------------------+--------------------------------------+ | STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') | +--------------------------------------+--------------------------------------+ | 1999-12-07 | 1999-07-12 | +--------------------------------------+--------------------------------------+
In questo caso, non otteniamo un valore NULL come nell'esempio precedente, perché entrambi 07
e 12
potrebbe essere un giorno o un mese.
Esempio 3:corrispondenza della stringa di formato
Anche se la stringa di formato è nell'ordine corretto, deve corrispondere anche al formato delle parti della data fornite nel primo argomento.
Quindi, ad esempio, non puoi farlo:
SELECT STR_TO_DATE('31 Dec, 1999','%d,%m,%Y');
Risultato:
+----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d,%m,%Y') | +----------------------------------------+ | NULL | +----------------------------------------+
In questo caso, dovremmo fare qualcosa del genere:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');
Risultato:
+-----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d %M, %Y') | +-----------------------------------------+ | 1999-12-31 | +-----------------------------------------+
Esempio 4 – Utilizzo della funzione GET_FORMAT()
Puoi anche passare il GET_FORMAT()
funzione come secondo argomento.
Ecco un esempio.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));
Risultato:
+----------------------------------------------------+ | STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) | +----------------------------------------------------+ | 1999-12-07 | +----------------------------------------------------+
Esempio 5 – Valori di data e ora
Puoi anche utilizzare questa funzione per restituire un valore di ora o data e ora.
Ecco un esempio che utilizza un valore datetime.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');
Risultato:
+--------------------------------------------------------+ | STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') | +--------------------------------------------------------+ | 1999-12-31 09:30:17 | +--------------------------------------------------------+
Specificatori di stringhe di formato
I seguenti specificatori possono essere utilizzati nella stringa di formato. Oltre a queste, puoi anche utilizzare stringhe letterali nella stringa di formato.
Specificatore | Descrizione |
---|---|
%a | Nome abbreviato del giorno della settimana (Sun ..Sat ) |
%b | Nome abbreviato del mese (Jan ..Dec ) |
%c | Mese, numerico (0 ..12 ) |
%D | Giorno del mese con suffisso inglese (0th , 1st , 2nd , 3rd , …) |
%d | Giorno del mese, numerico (00 ..31 ) |
%e | Giorno del mese, numerico (0 ..31 ) |
%f | Microsecondi (000000 ..999999 ) |
%H | Ora (00 ..23 ) |
%h | Ora (01 ..12 ) |
%I | Ora (01 ..12 ) |
%i | Minuti, numerici (00 ..59 ) |
%j | Giorno dell'anno (001 ..366 ) |
%k | Ora (0 ..23 ) |
%l | Ora (1 ..12 ) |
%M | Nome del mese (January ..December ) |
%m | Mese, numerico (00 ..12 ) |
%p | AM o PM |
%r | Ora, 12 ore (hh:mm:ss seguito da AM o PM ) |
%S | Secondi (00 ..59 ) |
%s | Secondi (00 ..59 ) |
%T | Ora, 24 ore (hh:mm:ss ) |
%U | Settimana (00 ..53 ), dove domenica è il primo giorno della settimana; WEEK() modalità 0 |
%u | Settimana (00 ..53 ), dove lunedì è il primo giorno della settimana; WEEK() modalità 1 |
%V | Settimana (01 ..53 ), dove domenica è il primo giorno della settimana; WEEK() modalità 2; utilizzato con %X |
%v | Settimana (01 ..53 ), dove lunedì è il primo giorno della settimana; WEEK() modalità 3; utilizzato con %x |
%W | Nome del giorno della settimana (Sunday ..Saturday ) |
%w | Giorno della settimana (0 =Domenica..6 =sabato) |
%X | Anno per la settimana in cui domenica è il primo giorno della settimana, numerico, quattro cifre; utilizzato con %V |
%x | Anno della settimana, dove lunedì è il primo giorno della settimana, numerico, a quattro cifre; usato con %v |
%Y | Anno, numerico, quattro cifre |
%y | Anno, numerico (due cifre) |
%% | Un letterale % carattere |
% | x , per qualsiasi “x ” non elencato sopra |