web-dev-qa-db-fra.com

Insérer une valeur de date dans la table SQL

J'ai le tableau suivant:

EMPNO(number), ENAME(varchar), JOB(char), MGR(number), HIREDATE(date), SAL(number), DEPTNO(number)

J'essaie d'insérer ce qui suit:

insert into EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
    values(7369, 'SMITH', 'CLERK', 7902, 17-DEC-1980, 800, 20);

Résultat: une erreur s'est produite. Revérifiez votre instruction SQL

Je suis sûr que c'est la date qui est incorrecte?

3
terrifurness

Utilisez toujours ANSI format littéral de chaîne par défaut pour date c'est-à-dire YYYY-MM-DD comme ci-dessous.

INSERT INTO EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES(7369,
       'SMITH',
       'CLERK',
       7902,
       '1980-12-17',
       800,
       20);

Il insérera vos données avec succès dans la plupart des rdbms, à savoir MySQL, PostgreSQL, SQL Server.

Dans Oracle, vous devez le convertir en date à l'aide de la fonction to_date([value],[format] avant l'insertion comme ci-dessous.

INSERT INTO EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES(7369,
       'SMITH',
       'CLERK',
       7902,
       to_date('1980-12-17', 'yyyy-mm-dd'),
       800,
       20);

Cependant, si votre date d'entrée est au format mentionné en question, vous pouvez utiliser cast dans SQL Server pour la convertir en datetime avant l'insertion comme ci-dessous.

INSERT INTO EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES(7369,
       'SMITH',
       'CLERK',
       7902,
       cast('17-Dec-1980' AS datetime),
       800,
       20);

Pour les autres rdbms, vous devez rechercher les fonctions de casting équivalentes.

Mise à jour:

Dans Oracle, pour le format de date fourni en question, vous pouvez utiliser to_date pour convertir votre entrée littérale de date de chaîne en utilisant le format 'DD-MON-YYYY' au type de données date.

TO_DATE('20-SEP-2017', 'DD-MON-YYYY')

Vous pouvez vérifier les démos ie MySQL, PostgreSQL, SQL Server, Oracle

3
zarruq

Cela fonctionne pour moi dans SQL Management Studio si j'utilise cette syntaxe:

ALTER TABLE tablename
ADD Report_Date datetime NULL;
GO
Update tablename set Report_Date = cast('2020-01-20' AS datetime)

comme zarruq dit précédemment.

0
Callixte F