web-dev-qa-db-ja.com

SQLテーブルに日付値を挿入する

次の表があります。

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ステートメントを再確認する

日付が間違っていると思いますか?

3
terrifurness

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

デモを確認できますMySQLPostgreSQLSQL ServerOracle

3
zarruq

この構文を使用すると、SQL管理スタジオで機能します。

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

zarruqが以前に述べたように。

0
Callixte F