sql >> Database teknologi >  >> RDS >> Oracle

Hvorfor kan jeg ikke indtaste denne dato i en tabel ved hjælp af sql?

Oracle laver en implicit TO_DATE på ikke-dato-literaler, når du indsætter dem i en DATE kolonne med værdien NLS_DATE_FORMAT som formatmasken. Hvis den ikke-dato-literal matcher dette format, vil den fungere (og hvis den ikke gør det, vil den ikke) - dog hvis NLS_DATE_FORMAT nogensinde ændres, vil den øjeblikkeligt gå i stykker (det vil være en stor smerte at fejlfinde, da den kode, der virkede, ikke vil, men ingen vil have ændret koden).

Du kan finde ud af din nuværende NLS_DATE_FORMAT med forespørgslen:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

Det er bedre eksplicit at bruge TO_DATE med det korrekte formatmaske eller at bruge en ANSI-dato-literal (dvs. DATE '2014-12-01' ).

insert into employees_table
values(
  05,
  'Sophie',
  'Kuchinskey',
  '[email protected]',
  105,
  5000000,
  60,
  TO_DATE( '20-sep-1994', 'DD-Mon-YYYY' )
);

Eller ved at bruge lokalitet/sprog agnostisk ANSI-format:

insert into employees_table
values(
  05,
  'Sophie',
  'Kuchinskey',
  '[email protected]',
  105,
  5000000,
  60,
  DATE '1994-09-20'
);


  1. Dupliker, kopier eller sikkerhedskopier tabeller i MySQL, MariaDB, Oracle, PostgreSQL, DB2 og SQLite med Create Table As SQL

  2. MySQL Fjern Duplicate Records

  3. Beregn Max of Sum af et kommenteret felt over en grupperet efter forespørgsel i Django ORM?

  4. MySQL Indsæt i Vælg