2009-03-12 10 views
1

Python CMSは、いくつかの日付値を一般的な属性表のvarchar列に格納します。これらの日付の一部は、後で実際の日付列のテーブルに移動されます。 CMSユーザーが無効な日付を入力した場合、移行が失敗すると、「無効な文字列の日付」エラーが発生してクエリが失敗します。PythonでOracleの日付を検証する

Pythonを使用して、CMSに入力されたすべての日付が有効なOracle文字列の日付表現であることを確認するにはどうすればよいですか?

答えて

5

Pythonを使用して、CMSに入力されたすべての日付が有効なOracle文字列の日付表現であることを確認するにはどうすればよいですか?

私は少しアプローチを変更したいと思います。 Pythonは元の日付入力をできるだけ慎重に解析してから、日付を既知の良い表現で出力します。

dateutilのリベラルパーサが開始するには良い場所かもしれ:

import dateutil.parser 
d= dateutil.parser.parse('1/2/2003') 
d.strftime('%d-%b-%y') 

私はよく分からない 『%D-%B-%』 yは、まだ実際にOracleのための右の日付フォーマットであるが、理想的には4桁の年数で、月名には依存しないと考えられます。 (トラップ:%bはロケールに依存するため、英語以外のOSでは不要な月名を返す可能性があります)おそらく、 "strftime( '%Y-%m-%d')" "TO_DATE(...、 'YYYY -MM-DD ')」が必要ですか?

+0

私は '%d-%b-%Y'(4桁年)を使用しますが、あなたはロケールの依存関係について正しいです。 +1は素晴らしいアプローチを示唆しています。 –

1

Oracleが日付として認識する日付文字列の形式は、データベースの構成可能なプロパティです。したがって、暗黙的に文字列を日付に変換することに頼っていると考えられます。

通常、Oracleの日付は「DD-MON-YYYY」にフォーマットされますが、そのように設定されているとは限りません。

個人的には、この属性表に「YYYY-MM-DD」のような標準形式でCMSを書き込んでから、DATE列に移動するどのジョブでも、to_date(値、 'YYYY-MM-DD')、問題はありません。

-1

できるだけ早く検証してください。なぜPython CMSに日付を日付として保存しないのですか?

'03 -04-2008 'のような文字列がどのような日付であるかを知ることは困難です。 2008年4月3日か2008年3月4日ですか?アメリカ人は2008年3月4日と言いますが、オランダ人は2008年4月3日を言います。