過去の桐井戸端BBS (桐ver.8)
11443 日時型データへの変換のやり方 mk 2001/06/05-14:55
mkです。Ver.8sp6を使っています。

[年]、[月]、[日]を整数型で持っている表があり、これを日時型の項目にまとめたいと考えております。
ところが、データの中に[年]だけがあり、[月]と[日]は空白のデータや、
[年]と[月]のデータはあるが[日]のデータは空白のものがあります。

そこで、[年月日]という日時値の項目を作り、項目計算式を以下のように設定しました。

#条件選択([年]=#未定義,#未定義,[月]=#未定義,#日時値生成([年]),[日]=#未定義,#日時値生成([年],[月]),1,#日時値生成([年],[月],[日]))

 ところが表定義画面から表画面に戻るときに、「KD1636:日時型のデータが不正です。
この行は計算途中のままで登録します」というメッセージが出てきます。
表画面で確認すると、年、月、日がすべて揃っている行はちゃんと変換されているのですが、
年のデータしかない行や日のデータがない行は空白のままです。
エラーメッセージにはエラーを起こした行番号も表示されるのですが、
これはすべてのデータが揃っていない最初の行です。

 私としては、年のデータしかない行の場合は、たとえば「2000年」、
日のデータだけがない場合には「2000年3月」というようにしたいのですが、
どのようにしたらよいか教えてください。よろしくお願いします。
11449 Re:日時型データへの変換 宮城 2001/06/05-19:40
記事番号11443へのコメント
mkさんこんにちは。

表のファイル属性で未定義項目値処理が「ゼロ」になっているためでしょう。
よって、未定義ならという条件にヒットせず、たとえば次のような処理をしたことになっているのだと思われます。

#日時値生成(2001,6,0)

回避するには「未定義」扱いに変えるか、条件選択を「=#未定義」から「<=0」に変えます。
ただし、こうしたとしても、関数のレファランスにあるとおり、「省略すると1になります」。

> 私としては、年のデータしかない行の場合は、たとえば「2000年」、日のデータ
>だけがない場合には「2000年3月」というようにしたいのですが、どのようにしたら
>よいか教えてください。よろしくお願いします。

日時型をあきらめて文字列型にして、次のようにでもするしかないでしょう。

#条件選択([年]<=0,#未定義
,[月]<=0,#文字列([年])+"年"
,[日]<=0,#文字列([年])+"年"+#文字列([月])+"月"
,1,#文字列([年])+"年"+#文字列([月])+"月"+#文字列([日])+"日")

11450 Re:日時型データへの変換 mk 2001/06/05-20:42
記事番号11449へのコメント
 おっしゃる通りで、ファイル属性の未定義項目値処理を「未定義」にするとうまくいきました。
「省略すると1になります」というのもその通りで、「2000年」と表示させたいのが、「2000年1月1日」となってしまいました。

 日時型で時間や分は省略して、表示されないのにどうしたのだろうと、いろいろといじってみると、
「項目の表示条件」のところにちゃんと表示範囲が「日まで」となっておりました。
いままで日時型データを使うことがなかったので、挑戦することにしたのですが、
残念ながらこれでは使えませんので、文字列型にすることにします。

 宮城さんありがとうございました。今後もよろしくお願いします。
                                              mk
11451 Re:日時型データへの変換 悲しげ 2001/06/05-21:12
記事番号11449へのコメント
[年]が空なのに[月]や[日]が有る、と云うような類のことが有り得ないとすれば
(なお且つ0年と0月と0日も有り得ないとするならば)次のようにも書くことができます。

#条件選択([年]>0,#文字列([年])+"年")+#条件選択([月]>0,#文字列([月])+"月")+#条件選択([日]>0,#文字列([日])+"日")

文字列にする場合で、もし1桁の月と日の前を半角空白としたければ、
  #右側文字列(#文字列([月]),2)+"月"
のように書きます、私はこの手をよく使いました。
11461 Re:日時型データへの変換 mk 2001/06/06-09:34
記事番号11451へのコメント
ありがとうございます。悲しげさんの項目計算式を使わせていただきます。

 実は会社のデータをもとに、自分に関係するところを抜き出して個人的に作っていたデータベースですが、
以前は手書きの書類を人の手で入力しており、もともと記入しない人もいたりで、項目がすべて埋められていたいたわけではなかったのです。

 ところが、各人が直接コンピュータ入力をするようになり、空白が埋めていないと受け付けられなくなりました。
それにあわせて記入項目も少し変更があったので、古いデータを新しい表に移し替える作業をしていて今回の質問をした次第です。
11469 そもそも日時値とは 佐田 守弘 2001/06/06-19:54
記事番号11443へのコメント
mkさん

●そもそも日時型とは
そもそも日時値とは、日付時刻座標上で、1時点を表す値です。
正しくは連続値ですが、桐の場合には(確か)千分の1秒単位で表現されます。
つまり、年月日時分秒で表現される値です。

従って、年だけ、あるいは年月までだけといった値は、本質的に日時値にはなじみません。
同様に本来は、年月日だけというのも正しくないので、実際には年月日だけの日付の場合には、0時0分0秒とする扱いになっています。

さて、年だけ、年月だけの時には、特定月(例えば3月1日など)の値を付加するしかありません。
それができず、月と日をブランクのままで持ちたいとしたら、日時型はなじみません。

●なぜ
私が気になるのは、なぜ月と日がブランクのデータがあるかです。
たまたまブランクなのか、ブランクにせざるを得ないのか、このあたりによってどうすべきかが決まる部分だと思います。

佐田守弘(KS-00119)
11476 Re:そもそも日時値とは mk 2001/06/07-10:27
記事番号11469へのコメント
佐田先生、コメントをありがとうございます。

 上に書きましたように、これからは月や日がブランクというのはなくなるのですが、
今までのデータと一緒にしようとすると、ブランクのものがあるので、日時型は駄目なようですね。

 ブランクの発生した理由は、手書きの時の入力者の怠慢とか、未定であり後で補うべきものがそのままになっていたりと理由はいろいろです。

戻る