在 SQL 表中插入日期值

ter*_*ess 3 sql date sql-insert

我有下表:

EMPNO(number), ENAME(varchar), JOB(char), MGR(number), HIREDATE(date), SAL(number), DEPTNO(number)
Run Code Online (Sandbox Code Playgroud)

我尝试插入以下内容:

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

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

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

zar*_*ruq 5

始终使用ANSI默认的字符串文字格式,dateYYYY-MM-DD像下面。

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

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

在 Oracle 中,您需要在插入之前将其转换为dateusing 函数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);
Run Code Online (Sandbox Code Playgroud)

但是,如果您的输入日期是有问题的格式,您可以cast在 SQL Server 中使用将其转换为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);
Run Code Online (Sandbox Code Playgroud)

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

更新:

在 Oracle 中,对于所提供的日期格式,您可以使用 formatto_date将字符串日期文字输入转换'DD-MON-YYYY'为 data type date

TO_DATE('20-SEP-2017', 'DD-MON-YYYY')
Run Code Online (Sandbox Code Playgroud)

您可以查看演示,即MySQLPostgreSQLSQL ServerOracle