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?
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
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.