web-dev-qa-db-ja.com

Oracle SQLテーブルの日付の更新

SQLテーブルの日付を更新しようとしています。 Peoplesoft Oracleを使用しています。このクエリを実行すると:

Select ASOFDATE from PASOFDATE;

2012年4月16日

このクエリを実行してみました

UPDATE PASOFDATE SET ASOFDATE = '11/21/2012';

しかし、それは機能していません。

日付を希望の日付に変更する方法を知っている人はいますか?

24
Stack Over

これは、仮定に基づいており、無効な月の値や数値が予想される場合の非数字など、日付形式に関するエラーが発生する。

データベースに保存されている日付には形式がありません。クライアントが表示する日付を4/16/2011としてフォーマットしている日付を照会すると。通常、日付の選択と更新には同じ日付形式が使用されますが、この場合は異なるように見えます。そのため、クライアントは、たとえばSQL * Plusよりも複雑なことを行っているようです。

更新しようとすると、デフォルトの 日付形式モデル が使用されます。それがどのように表示されるかにより、それはMM/DD/YYYYであると仮定していますが、そうではないようです。あなたはそれが何であるかを知ることができますが、デフォルトまたは暗黙のフォーマットモデルにまったく依存しないほうが良いです。

それが問題であるかどうかにかかわらず、常に日付モデルを指定する必要があります。

UPDATE PASOFDATE SET ASOFDATE = TO_DATE('11/21/2012', 'MM/DD/YYYY');

時刻コンポーネントを指定していないため、すべてのOracle DATE列には時刻が含まれています(深夜であっても)- 日付リテラル を使用することもできます。

UPDATE PASOFDATE SET ASOFDATE = DATE '2012-11-21';

現在の値に時間が含まれていないことを確認する必要がありますが、列名には含まれていないことが示されています。

73
Alex Poole

このSQLがPeopleSoft固有のコード(Application Engine、SQLEXEC、SQLfetchなど)で使用されている場合、%Datein metaSQLを使用できます。 Peopletoolsは、日付をアプリケーションが実行されているデータベースプラットフォームで受け入れられる形式に自動的に変換します。

このSQLを使用してクエリアナライザー(SQLDeveloper、SQLToolsなど)からバックエンドの更新を実行している場合、使用されている日付形式が間違っています。 Oracleは、日付形式がDD-MMM-YYYYであると想定しています。MMMはJAN、FEB、MARなどです。

1
navi