|
返信数:
4
-
ページ数:
1
-
最新投稿
:
2007/10/19 18:45
最新投稿者: hh
-
スレッド表示形式:
|
|
|
|
|
|
|
TO_DATE(sysdate,'YYYY/MM/DD')としたときの動き
投稿時刻:
2007/10/19 17:36
|
|
sysdateから日付の部分だけをとりたい場合、 TO_CHAR(sysdate,'YYYY/MM/DD')とすれば取れますが、 これを誤って TO_DATE(sysdate,'YYYY/MM/DD')として、 そしてそれ結果をINSERTで日付型のカラムに入れたら、 ’2007'としたかった年の部分が'0007'となってしまいました。
本来なら TO_DATE(TO_CHAR(sysdate,'YYYY/MM/DD'))とすればいいのは分かるのですが、 なぜ上記のような結果になるのでしょうか。 NLS_DATE_FORMATが'RR-MM-DD'となっていることが関係があるのは分かるのですが、 うまく流れが説明できません。 どういうことになっているのでしょうか。
|
|
投稿数:
11,815
登録日時:
99/03/15
|
|
|
|
Re: TO_DATE(sysdate,'YYYY/MM/DD')としたときの動き
投稿時刻:
2007/10/19 17:40
hh さんへの返信です。
|
|
> 本来なら > TO_DATE(TO_CHAR(sysdate,'YYYY/MM/DD'))とすればいいのは分かるのですが、
いいえ、時間部分が不要でしたらtrunc(sysdate)ではないかと。
> なぜ上記のような結果になるのでしょうか。 > NLS_DATE_FORMATが'RR-MM-DD'となっていることが関係があるのは分かるのですが、 > うまく流れが説明できません。
TO_CHAR(TO_DATE(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD')を 確認すればわかるのでは。
|
|
|
|
|
|
Re: TO_DATE(sysdate,'YYYY/MM/DD')としたときの動き
投稿時刻:
2007/10/19 18:13
茶太郎 さんへの返信です。
|
|
回答ありがとうございます。
TRUNCというものがあるのですね、知りませんでした。 これを使うべきですね。
>TO_CHAR(TO_DATE(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD')を >確認すればわかるのでは。
これを実行すると、'0007/10/19'という形で返ってきました。 そこでsysdate部分を文字にして、 TO_CHAR(TO_DATE('07-10-19','YYYY/MM/DD'),'YYYY/MM/DD')としたら やはり'0007/10/19'という形で返ってきました。
そこで思ったのですが、 本来、TO_DATEの最初の引数は文字列であるべきなので、 sysdateが内部的に文字列に変換されているのではないでしょうか。 NLS_DATE_FORMATにしたがって'07-10-19'という形式に。 でこれをTO_DATEでもう一度DATE型にしようとするのですが、 フォーマットとして'YYYY/MM/DD'が指定されているので、 無理やり年号部分を4桁と解釈しようとした結果、'0007'になってしまう。 ということなのかなと思うのですが・・・。 実際、TO_DATEのフォーマットを'YY/MM/DD'にしてやれば、'2007'になりましたので。
|
|
投稿数:
5,722
登録日時:
99/12/20
|
|
|
|
Re: TO_DATE(sysdate,'YYYY/MM/DD')としたときの動き
投稿時刻:
2007/10/19 18:35
hh さんへの返信です。
|
|
こんにちは。 >>回答ありがとうございます。 > >TRUNCというものがあるのですね、知りませんでした。 >これを使うべきですね。 > > >>TO_CHAR(TO_DATE(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD')を >>確認すればわかるのでは。 > >これを実行すると、'0007/10/19'という形で返ってきました。 >そこでsysdate部分を文字にして、 >TO_CHAR(TO_DATE('07-10-19','YYYY/MM/DD'),'YYYY/MM/DD')としたら >やはり'0007/10/19'という形で返ってきました。 > >そこで思ったのですが、 >本来、TO_DATEの最初の引数は文字列であるべきなので、 >sysdateが内部的に文字列に変換されているのではないでしょうか。 それを確認するのは、マニュアルです。
見るとわかりますが、第1引数は、文字列だけではなく、数値も 受け付けます。
# TRUNCもマニュアルに出ています。関数については比較的まとまって # 記載されていますので、ぜひ、全て目を通してください。全て覚える # のではなく、「そーいえば、そんなようなのがあったような気が?」と # というレベルでも、目を通したかどうかで、雲泥の差があります。 ## TRUNCも引数の型によっていろいろと動作があります。 -- CMN v0.50eβ うぇいく --
|
|
|
|
|
|
Re: TO_DATE(sysdate,'YYYY/MM/DD')としたときの動き
投稿時刻:
2007/10/19 18:45
うぇいく さんへの返信です。
|
|
回答ありがとうございます。
質問する前にマニュアルを見るべきでしたね。 すみませんでした。
>見るとわかりますが、第1引数は、文字列だけではなく、数値も受け付けます
なるほど、そうなんですね。 勉強になります。
どうもありがとうございました。
|
|
|
|