次の表があります。
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
には常に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では、以下のように挿入する前に、関数to_date([value],[format]
を使用して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);
ただし、入力日付が問題のある形式の場合は、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
この構文を使用すると、SQL管理スタジオで機能します。
ALTER TABLE tablename
ADD Report_Date datetime NULL;
GO
Update tablename set Report_Date = cast('2020-01-20' AS datetime)
zarruqが以前に述べたように。