web-dev-qa-db-fra.com

Vous avez peut-être besoin d'un paramètre de "style de données" différent

J'ai une table qui a une colonne date_commande de type date.

requete:

INSERT INTO uni_data_temp(sale_order_item_code, 
            order_date, sale_order_item_status, tracking_number, dispatch_date, 
            user_id) VALUES ('1000932515',  cast('16/05/2015' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4')

lorsque j'exécute cette requête, cela donne une erreur:

ERROR: date/time field value out of range: "16/05/2015"
SQL state: 22008
Hint: Perhaps you need a different "datestyle" setting.
Character: 380

alors j'ai changé la requête

INSERT INTO uni_data_temp(sale_order_item_code, 
            order_date, sale_order_item_status, tracking_number, dispatch_date, 
            user_id) VALUES ('1000932515',  cast('2015/05/16' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4')

Ça fonctionne bien.

mais mon problème est que ma date peut être dans n'importe quel style (aaaa/mm/jj ou jj/mm/aaaa) comment puis-je la diffuser en fonction de la base de données?

Tout type de format de date converti en base de données système.

Merci

12
YAM

Vous utilisez des chaînes pour les dates et comptez sur les paramètres de session pour interpréter correctement les chaînes. Utilisez plutôt des littéraux de date pris en charge de manière à être indépendant des paramètres.

Dans PostgreSQL (et le standard SQL d'ailleurs) DATE 'YYYY-MM-DD' est considéré comme un littéral de date et est le format que je recommanderais. Alors utilisez

INSERT INTO uni_data_temp
  ( sale_order_item_code
  , order_date
  , sale_order_item_status
  , tracking_number
  , dispatch_date
  , user_id
  ) 
VALUES 
  ( '1000932515'
  , DATE '2015-05-16'
  , 'DISPATCHED'
  , 'UNIPAYP1958141'
  , DATE '2015-05-20'
  , 4
  );

(Merci à a_horse_with_no_name de m'avoir indiqué la syntaxe littérale de date correcte dans PostgreSQL.)

Si, cependant, vous obtenez les dates sous forme de chaînes de quelque part, vous devez appliquer le format correspondant:

TO_DATE('06/05/2015', 'DD/MM/YYYY')
TO_DATE('05/06/2015', 'MM/DD/YYYY')
11
Thorsten Kettner