在SQL表中插入日期值

在SQL表中插入日期值,sql,date,sql-insert,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);

我有下表:

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语句


我确信是日期不正确?

始终使用
ANSI
默认字符串文字格式作为
日期,即
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
,如下所示

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);
INSERT INTO EMP_TF1605(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES(7369,
       'SMITH',
       'CLERK',
       7902,
       cast('17-Dec-1980' AS datetime),
       800,
       20);
但是,如果您的输入日期是上述格式,您可以在SQL Server中使用
cast
将其转换为
datetime
,然后再插入,如下所示

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

您可以查看演示,即

如果我使用以下语法,它在SQL management studio中对我有效:

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

正如zarruq之前所说。

您需要在日期常量周围加上单引号。插入EMP_TF1605(EMPNO、ENAME、JOB、MGR、HIREDATE、SAL、DEPTNO)值(7369,‘SMITH’、‘CLERK’、7902、‘1980年12月17日’、800、20);谢谢-仍然给我错误?您收到了什么错误消息?您使用的是什么DBMS?在学习Oracle章节时使用在线课程sqlcourse.com进行练习-希望输入数据以练习约束?错误是:发生了错误。请重新检查SQLstatement@terrifurness:请接受答案以备将来参考:-)表达固定日期的最佳方式是
日期“2017-09-20”
。然而,你的回答对增加@zarruq未提供的新知识几乎没有帮助。