在SQL表

时间:2017-09-20 02:41:05

标签: sql date sql-insert

我有下表:

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

我尝试插入以下内容:

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

结果: 发生了错误。重新检查您的SQL语句

我确定这是不正确的日期?

2 个答案:

答案 0 :(得分:1)

始终对ANSI使用date默认字符串文字格式,例如YYYY-MM-DD,如下所示。

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

它将在大多数rdbms中成功插入您的数据,即MySQL,PostgreSQL,SQL Server。

在Oracle中,您需要在插入之前使用函数date将其转换为to_date([value],[format],如下所示。

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);

但是,如果您的输入日期采用相关格式,则可以在SQL Server中使用cast在插入之前将其转换为datetime,如下所示。

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

对于其他rdbms,您需要查找等效的转换函数。

<强>更新

在Oracle中,对于相关日期格式,您可以使用to_date将字符串日期文字输入转换为使用格式'DD-MON-YYYY'到数据类型date

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

您可以查看演示,例如 MySQL PostgreSQL SQL Server Oracle

答案 1 :(得分:0)

如果我使用以下语法,它将在SQL Management Studio中对我有用:

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

zarruq 所说。