hora - select date mysql
CURRENT_DATE/CURDATE() no funciona como valor de FECHA predeterminado (5)
Una pregunta bastante directa aquí, creo que esto debería funcionar, pero no es así. ¿Por qué no?
CREATE TABLE INVOICE(
INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
Como la otra respuesta indica correctamente, no puede usar funciones dinámicas como valor predeterminado. Puede usar TIMESTAMP
con el atributo CURRENT_TIMESTAMP
, pero esto no siempre es posible, por ejemplo, si desea mantener una marca de tiempo de creación y actualizada , y necesita la única columna TIMESTAMP
permitida para el segundo.
En este caso, use un disparador en su lugar .
De acuerdo con esta documentation , comenzando en MySQL 8.0.13, podrá especificar:
CREATE TABLE INVOICE(
INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)
Lamentablemente, a partir de hoy, esa versión aún no se ha publicado. Puede consultar here las últimas actualizaciones.
No funciona porque no es compatible
La cláusula
DEFAULT
especifica un valor predeterminado para una columna. Con una excepción, el valor predeterminado debe ser una constante; no puede ser una función o una expresión. Esto significa, por ejemplo, que no puede establecer el valor predeterminado para una columna de fecha como el valor de una función comoNOW()
oCURRENT_DATE
. La excepción es que puede especificarCURRENT_TIMESTAMP
como predeterminado para una columnaTIMESTAMP
declare su columna de fecha como NOT NULL, pero sin un valor predeterminado. Luego agrega este disparador:
USE `ddb`;
DELIMITER $$
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW
if ( isnull(new.query_date) ) then
set new.query_date=curdate();
end if;
$$
delimiter ;
create table the_easy_way(
capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
capture_dt DATE AS (DATE(capture_ts))
)
(MySQL 5.7)