Como título, ¿cómo puedo establecer que la columna de una tabla tenga el valor predeterminado del año y mes actual, en formato 'AAAAMM', como 200905 para hoy?¿Cómo establecer un valor predeterminado de fecha y hora de Postgresql como 'AAAAMM'?
Respuesta
Tenga en cuenta que el formato de la fecha es independiente del almacenamiento. Si es esencial para usted que la fecha sea almacenada en ese formato, necesitará definir un tipo de datos personalizado o almacenarlo como una cadena. A continuación, puede usar una combinación de extract, encasillado y concatenación para obtener ese formato.
Sin embargo, sospecho que desea almacenar una fecha y obtener el formato en la salida. Por lo tanto, algo así te servirá:
CREATE TABLE my_table
(
id serial PRIMARY KEY not null,
my_date date not null default CURRENT_DATE
);
(CURRENT_DATE is basically a synonym for now() and a cast to date).
(Editado para usar to_char).
entonces se puede obtener su salida como:
SELECT id, to_char(my_date, 'yyyymm') FROM my_table;
Ahora, si hizo realmente necesita para almacenar ese campo como una cadena y garantizar el formato siempre se puede hacer:
CREATE TABLE my_other_table
(
id serial PRIMARY KEY not null,
my_date varchar(6) default to_char(CURRENT_DATE, 'yyyymm')
);
¿Por qué querrías hacer esto?
En mi humilde opinión, debe guardar la fecha como tipo predeterminado y, si es necesario, recuperarla transformándola al formato deseado.
Puedes salirte con la tarea especificando el formato de la columna pero con una vista. No conozco otros métodos.
Editado:
serio, en mi opinión, se debe crear una vista en la que una tabla con tipo de fecha. Estoy hablando de algo como esto:
create table sample_table (id serial primary key, timestamp date);
y que
create view v_example_table as select id, to_char(date, 'yyyymmmm');
Y el uso de v_example_table en su aplicación.
Derecha. Es mejor usar una función:
CREATE OR REPLACE FUNCTION yyyymm() RETURNS text
LANGUAGE 'plpgsql' AS $$
DECLARE
retval text;
m integer;
BEGIN
retval := EXTRACT(year from current_timestamp);
m := EXTRACT(month from current_timestamp);
IF m < 10 THEN retval := retval || '0'; END IF;
RETURN retval || m;
END $$;
SELECT yyyymm();
DROP TABLE foo;
CREATE TABLE foo (
key int PRIMARY KEY,
colname text DEFAULT yyyymm()
);
INSERT INTO foo (key) VALUES (0);
SELECT * FROM FOO;
Esto me da
key | colname
-----+---------
0 | 200905
Asegúrese de ejecutar createlang plpgsql
desde la línea de comandos de Unix, si es necesario.
o crea "create language plpgsql" desde psql, que es todo lo que createlang hace. – araqnid
Gracias por todos los que respondió, y gracias por los que me dieron la idea de la función de formato , realmente lo estudiaré para usar en el futuro.
Pero para este caso explícito, el 'campo especial yyyymm' no se debe considerar como un campo de fecha, sino solo como una etiqueta, o lo que se usaría para hacer coincidir el valor investigado exactamente del año-mes; ya hay otro campo de fecha, con la marca de tiempo completo, pero si tengo que todas las filas de enero de 2008, creo que es más rápido un selecto como
SELECT [columns] FROM table WHERE yearmonth = '200801'
en lugar de
SELECT [columns] FROM table WHERE date BETWEEN DATE('2008-01-01') AND DATE('2008-01-31')
Es una común concepto erróneo de que puede denormalise así por el rendimiento. Use date_trunc('month', date)
para sus consultas y agregue una expresión de índice para esto si lo encuentra funcionando lentamente.
- 1. Establecer formato predeterminado de fecha y hora C#
- 2. Drupal CCK Fecha: cómo establecer el valor predeterminado del campo de fecha y hora en una fecha de reparación?
- 3. Establecer el valor predeterminado en el campo Fecha y hora en el formulario symfony2
- 4. MySQL columna de indicación de fecha y hora valor predeterminado AHORA valor ERROR 1067
- 5. ¿Cómo establecer el valor predeterminado para una columna de fecha y hora en el script de migración?
- 6. ¿Cómo paso un valor de fecha y hora como un parámetro de URI en asp.net mvc?
- 7. cómo emitir datetime2 como fecha y hora
- 8. Html.EditorFor Establecer valor predeterminado
- 9. Establecer el valor predeterminado en el diseñador de EF datetime
- 10. Como llegar hora y la fecha del sello de fecha y hora en php
- 11. php function ¿cómo establecer el valor predeterminado como objeto?
- 12. de fecha y hora
- 13. Establecer git diff en un valor predeterminado
- 14. ¿Cómo establecer el valor predeterminado para sysdate en MySql?
- 15. ¿Cómo establecer un valor predeterminado para la lista de elementos?
- 16. Fecha y hora de división en una fecha y un valor de tiempo
- 17. Cómo establecer el valor predeterminado de un ListPreference
- 18. Convertir de Bigint al valor de fecha y hora
- 19. ¿Puedo crear una columna de fecha y hora con el valor predeterminado en sqlite3?
- 20. PostgreSQL ordenar por fecha y hora asc, null primero?
- 21. ¿Establecer el valor predeterminado en un DataContract?
- 22. Selector de fecha y hora: configuración de la fecha y hora de apertura
- 23. ¿Cómo restar una fecha y hora de otra fecha y hora?
- 24. Valor predeterminado de MySQL como el valor de otro campo
- 25. Convertir la cadena de fecha AAAAMMDD a un valor de fecha y hora
- 26. Cómo crear XElement fecha en representación de fecha y hora como tipo xs: Fecha
- 27. Establecer un valor predeterminado para una propiedad
- 28. Insertar valor predeterminado como fecha actual + 30 días en MySQL
- 29. Rieles: Obtenga la hora de una fecha y hora
- 30. ¿Puedo establecer un valor de campo predeterminado de un EntityProxy?
Becose lo necesito. Tengo una aplicación php que ejecuta y consulta el DB con ese valor, 'aaaamm' como '200801', '200802', etc. para recuperar los datos, y creo que tenerlo como valor predeterminado sería mejor que un SELECT campos de la tabla WHERE columna ENTRE timestamp1 Y timestamp2 – Strae
Haría esto con la solución que agregué a mi respuesta. –