MySQL STR_TO_DATE()
La función le permite crear un valor de fecha a partir de las distintas partes de la fecha.
Al usar esta función, proporciona una cadena de varias partes de la fecha y un segundo argumento que especifica el formato en el que se proporciona la fecha.
Sintaxis
La sintaxis es así:
STR_TO_DATE(str,format)
Donde str
es la cadena que contiene las partes de la fecha, y formato es la cadena de formato (determina cómo str
el argumento está formateado).
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Resultado:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%d,%m,%Y') | +--------------------------------------+ | 1999-12-31 | +--------------------------------------+
Ejemplo 2:orden de la cadena de formato
La cadena de formato debe coincidir con los valores proporcionados en la cadena de fecha. Por ejemplo, no puede hacer lo siguiente:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Resultado:
+--------------------------------------+ | STR_TO_DATE('31,12,1999','%m,%d,%Y') | +--------------------------------------+ | NULL | +--------------------------------------+
La razón por la que esto no funcionó es porque estamos tratando de forzar que el mes tenga un valor de 31, pero solo hay 12 meses en un año. Entonces esto daría como resultado un valor de fecha no válido.
Por lo tanto, deberá tener cuidado al usar esta función, especialmente cuando el valor del día es 12 o menos, de lo contrario, podría terminar intercambiando los valores del mes y el día sin darse cuenta.
Por ejemplo, así:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');
Resultado:
+--------------------------------------+--------------------------------------+ | STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') | +--------------------------------------+--------------------------------------+ | 1999-12-07 | 1999-07-12 | +--------------------------------------+--------------------------------------+
En este caso, no obtenemos un valor NULL como en el ejemplo anterior, porque tanto 07
y 12
podría ser un día o un mes.
Ejemplo 3:hacer coincidir la cadena de formato
Incluso si la cadena de formato está en el orden correcto, también debe coincidir con el formato de las partes de la fecha proporcionadas en el primer argumento.
Entonces, por ejemplo, no puedes hacer esto:
SELECT STR_TO_DATE('31 Dec, 1999','%d,%m,%Y');
Resultado:
+----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d,%m,%Y') | +----------------------------------------+ | NULL | +----------------------------------------+
En este caso, tendríamos que hacer algo como esto:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');
Resultado:
+-----------------------------------------+ | STR_TO_DATE('31 Dec, 1999','%d %M, %Y') | +-----------------------------------------+ | 1999-12-31 | +-----------------------------------------+
Ejemplo 4:uso de la función GET_FORMAT()
También puede pasar el GET_FORMAT()
funcionan como el segundo argumento.
He aquí un ejemplo.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));
Resultado:
+----------------------------------------------------+ | STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA')) | +----------------------------------------------------+ | 1999-12-07 | +----------------------------------------------------+
Ejemplo 5:valores de fecha y hora
También puede usar esta función para devolver un valor de hora o fecha y hora.
Aquí hay un ejemplo usando un valor de fecha y hora.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');
Resultado:
+--------------------------------------------------------+ | STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s') | +--------------------------------------------------------+ | 1999-12-31 09:30:17 | +--------------------------------------------------------+
Especificadores de cadena de formato
Los siguientes especificadores se pueden utilizar en la cadena de formato. Además de estos, también puede usar cadenas literales en la cadena de formato.
Especificador | Descripción |
---|---|
%a | Nombre abreviado del día de la semana (Sun ..Sat ) |
%b | Nombre abreviado del mes (Jan ..Dec ) |
%c | Mes, numérico (0 ..12 ) |
%D | Día del mes con sufijo en inglés (0th , 1st , 2nd , 3rd , …) |
%d | Día del mes, numérico (00 ..31 ) |
%e | Día del mes, numérico (0 ..31 ) |
%f | Microsegundos (000000 ..999999 ) |
%H | Hora (00 ..23 ) |
%h | Hora (01 ..12 ) |
%I | Hora (01 ..12 ) |
%i | Minutos, numérico (00 ..59 ) |
%j | Día del año (001 ..366 ) |
%k | Hora (0 ..23 ) |
%l | Hora (1 ..12 ) |
%M | Nombre del mes (January ..Dec ) |
%m | Mes, numérico (00 ..12 ) |
%p | AM o PM |
%r | Hora, 12 horas (hh:mm:ss seguido de AM o PM ) |
%S | Segundos (00 ..59 ) |
%s | Segundos (00 ..59 ) |
%T | Hora, 24 horas (hh:mm:ss ) |
%U | Semana (00 ..53 ), donde el domingo es el primer día de la semana; WEEK() modo 0 |
%u | Semana (00 ..53 ), donde el lunes es el primer día de la semana; WEEK() modo 1 |
%V | Semana (01 ..53 ), donde el domingo es el primer día de la semana; WEEK() modo 2; usado con %X |
%v | Semana (01 ..53 ), donde el lunes es el primer día de la semana; WEEK() modo 3; usado con %x |
%W | Nombre del día de la semana (Sunday ..Sat ) |
%w | Día de la semana (0 =Domingo..6 =sábado) |
%X | Año de la semana donde el domingo es el primer día de la semana, numérico, cuatro dígitos; usado con %V |
%x | Año de la semana, donde lunes es el primer día de la semana, numérico, cuatro dígitos; usado con %v |
%Y | Año, numérico, cuatro dígitos |
%y | Año, numérico (dos dígitos) |
%% | Un % literal personaje |
% | x , para cualquier “x ” no listado arriba |