sql >> Base de Datos >  >> RDS >> Mysql

SUBDATE() vs DATE_SUB() en MySQL:¿Cuál es la diferencia?

La diferencia entre MySQL SUBDATE() y DATE_SUB() funciones es exactamente la misma que la diferencia entre ADDDATE() y DATE_ADD() funciones Una función permite dos formas de sintaxis diferentes, mientras que la otra permite solo una.

Este artículo demuestra la diferencia.

Sintaxis

Esta es la sintaxis de cada función.

FECHA_SUB()

El DATE_SUB() la sintaxis es así.

DATE_SUB(date,INTERVAL expr unit)

Esto acepta un valor de fecha, seguido del INTERVAL palabra clave y la expresión y unidad para la cual restar de la fecha proporcionada por el primer argumento.

SUBFECHA()

El SUBDATE() la sintaxis permite dos formas. Puede utilizar cualquiera de los siguientes formularios.

SUBDATE(date,INTERVAL expr unit)

O

SUBDATE(expr,days)

El primer formulario es exactamente igual que el DATE_SUB() sintaxis, y cuando usa esta sintaxis, el SUBDATE() función es un sinónimo de DATE_SUB() .

Sin embargo, la segunda forma de sintaxis solo está disponible cuando se usa SUBDATE() función, y le permite utilizar una forma abreviada de especificar el número de días para restar de la fecha.

Ejemplo

Aquí hay un ejemplo del uso de ambas funciones para restar una cierta cantidad de días de la misma fecha.

SET @date = '2023-12-10';
SELECT 
    DATE_SUB(@date, INTERVAL 5 DAY) AS 'DATE_SUB',
    SUBDATE(@date, INTERVAL 5 DAY) AS 'SUBDATE 1',
    SUBDATE(@date, 5) AS 'SUBDATE 2';

Resultado:

+------------+------------+------------+
| DATE_SUB   | SUBDATE 1  | SUBDATE 2  |
+------------+------------+------------+
| 2023-12-05 | 2023-12-05 | 2023-12-05 |
+------------+------------+------------+

Sin embargo, si intentamos usar la forma de sintaxis alternativa con DATE_SUB() obtenemos un error.

SET @date = '2023-12-10';
SELECT DATE_SUB(@date, 5) AS 'DATE_SUB 2';

Resultado:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5) AS 'DATE_SUB 2'' at line 1

Y, por supuesto, la razón de este error es que DATE_SUB() no admite esa sintaxis.

Tenga en cuenta que esta segunda forma de sintaxis solo se puede usar para restar días Desde la fecha. Si necesita restar cualquier otra unidad (por ejemplo, meses), deberá usar la primera sintaxis.