- - PR -
Timestampのテーブルにyyyy/mm/dd hh:mm:ssで入れたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-29 22:31
こんにちは。
Oracle10gのテーブルのTimestamp型にyyyy/mm/dd hh:mm:ssのフォーマットで入れたいのですが、どのようにセットすればよろしいのでしょうか?(或いはミリ秒を表示させないようにするには・・) テーブルの型がDateであればいい話なのですが・・。 PreparedStatement ps = conection.prepareStatement(SQL); ps.setTimestamp(1, new Timestamp(System.currentTimeMillis())); よろしくお願いします。 | ||||
|
投稿日時: 2007-10-29 22:50
SQLで取得時またはJAVAで表示時に整形すればいいかと
| ||||
|
投稿日時: 2007-10-29 23:41
「フォーマットで入れたい」「ミリ秒を表示させないようにする」という文言から察するに、日付型の意味がよくわかっていないのだと思います。
簡単に言うと、日付型に格納されているのはある時点からのシリアル値(つまり数値)です。 なので「特定のフォーマットで格納」ということは意味をなしません。 格納される精度は、Oracle ならDate型かTimestamp型かで決まります。 | ||||
|
投稿日時: 2007-10-30 00:20
Javaとは関係ないですが、
Date型だと ALTER SESSION SET NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'; というようにするとフォーマットが変わりますよね。 TIMESTAMP型でも ALTER SESSION SET NLS_TIMESTAMP_FORMAT='yyyy/mm/dd hh24:mi:ss'; をしたら良いんじゃないでしょうか。 やはりJavaから接続する場合はあまり良く知りませんが、 Webサーバーだか、アプリケーションサーバだかの起動時の環境変数として NLS_TIMESTAMP_FORMAT を設定しておくというのではどうでしょうか。 PHPでやったときは、デフォルトのフォーマットを変える際は Apache の起動時の環境変数を設定したような気がします。 また、Javaアプリケーションの場合も環境変数を指定したら デフォルトのフォーマットが変わりました。 http://biz.rivus.jp/nlsparameter.html とかを参考にしました | ||||
|
投稿日時: 2007-11-06 15:59
flatlineさんが仰ってる様にあくまでそれが
Date型かTimestamp型かというだけなのかと思ったりなのですが…。 データとして利用する際に、形式変更が必要であれば 汀さんの仰る様に整形すればよいだけじゃないですかね? ※to_charで変換とかは、ユーザ要件によってよくやりますしね。 もし要件が「Oracle10gのテーブルのTimestamp型に yyyy/mm/dd hh:mm:ssのフォーマットで入れたいのです」 であれば、それは無理な話だと思います | ||||
|
投稿日時: 2007-11-06 17:40
Oracleの日付型はシリアル値ではなく、年や月などの各パート毎に値を保持しています。 それでもやはり、表示形式とは無関係ですけどね。 Javaのjava.sql.Timestampやjava.util.Dateは内部的にはシリアル値なんですが。 | ||||
|
投稿日時: 2007-11-06 17:44
セットしたTimestamp値が「yyyy/mm/dd hh:mm:ss形式ではない」ことを、どのようにして確認しましたか? もしSQL*PlusなどのツールでSELECT文を実行したのであれば、tricksterさんご指摘のように、to_char関数で整形して下さい。 SELECT ..., to_char(timestamp_column_name, 'YYYY/MM/DD HH24:MM:SS'), ... | ||||
|
投稿日時: 2007-11-07 00:06
そ、そうでした。 つい最近、Excel の日付を調べたので、ごっちゃになってしまいました。 |
1