Posted on 11月 20, 2007 | Category: DB, Oracle and PostgreSQL |
仕事柄SQLを使う機会が多いのでそこで発見した不思議です。
日付をよくいじる事が多いのですが、その中で発見した事です
Select分でTo_Dateをあまり使わないと思いますが、
これはサンプルという事で(分かりやすく表示したかったので)
oracle 10g R1(多分8iも大丈夫)
select To_Date(’20070125′, ‘yyyymmdd’) from dual; —-OK
select To_Date(’20070125′, ‘yyyy-mm-dd’) from dual; —-OK
select To_Date(’20070125′, ‘yyyy/mm/dd’) from dual; —-OK
select To_Date(’2007/01/25′, ‘yyyy-mm-dd’) from dual; —-OK
select To_Date(’2007-01-25′, ‘yyyy/mm/dd’) from dual; —-OK
select To_Date(’2007a01a25′, ‘yyyy/mm/dd’) from dual; —-Error
select To_Date(’2007z01z25′, ‘yyyy/mm/dd’) from dual; —-Error
select To_Date(’2007*01*25′, ‘yyyy/mm/dd’) from dual; —-Error
select To_Date(’2007-01-25′, ‘yyyymmdd’) from dual —-Error
select To_Date(’2007/01/25′, ‘yyyymmdd’) from dual —-Error
select To_Date(’20074025′, ‘yyyymmdd’) from dual; —-Error
select To_Date(’20073125′, ‘yyyy/mm/dd’) from dual; —-Error
PostgreSQL 8.1.10
select To_Date(’20070125′, ‘yyyymmdd’); —-OK
select To_Date(’20070125′, ‘yyyy-mm-dd’); —-”8310903-12-13″と桁数多く表示される
select To_Date(’20070125′, ‘yyyy/mm/dd’); —-”8310903-12-13″と桁数多く表示される
select To_Date(’2007/01/25′, ‘yyyy-mm-dd’); —-OK
select To_Date(’2007-01-25′, ‘yyyy/mm/dd’); —-OK
select To_Date(’2007a01a25′, ‘yyyy/mm/dd’); —-OK
select To_Date(’2007z01z25′, ‘yyyy/mm/dd’); —-OK
select To_Date(’2007*01*25′, ‘yyyy/mm/dd’); —-OK
select To_Date(’2007-01-25′, ‘yyyymmdd’); —-”2007-01-01″日付が変わる
select To_Date(’2007/01/25′, ‘yyyymmdd’); —-”2007-01-01″日付が変わる
select To_Date(’20074025′, ‘yyyymmdd’); —-”2010-04-30″日付が変わる
select To_Date(’20073125′, ‘yyyy/mm/dd’); —-”8313903-12-13″と桁数多く表示される
まあオラクルのスラッシュorマイナスが無くても正しく表示されるのには驚きました、
出来ればエラーで返して欲しいのですが、大丈夫なんだと驚き程度で。
一番驚いたのはPostgreSQL 桁数が分かるのはInsert やUpdateの時
エラー出るから良いと思うのですが、日付が変わっちゃうのはいかがな物でしょう。。。
あと
select To_Date(’20074025′, ‘yyyymmdd’)
これが日付変わってしまうのにも驚き、エラーじゃ無いんですね、Insert時にはエラー
になるんでしょうが・・・(そんなPGする方が悪いという突っ込みは無しで)
DBによってTo_Dateの動作が変わるのにも驚きでした(これは当たり前だと思いますが実際してみるとここまで違うとは)
参考程度に・・・・
» Filed Under DB, Oracle and PostgreSQL