- ベストアンサー
Accessの日付抽出について
Accessを勉強しています。Accessで日付を抽出するときにたとえば「2011/9/2」なら教科書では「2011/09/02」と入れて抽出しています。 別に「2011/9/2」と入れてもまったく同じ結果なので0を入れる意味がわかりません。 これはなぜ0を入れるのでしょうか? 入れると何が違うのでしょう? 知っている方教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Accessのプログラムって、結構業務で使うことが多いので、出力用紙のフォーマットなどに制限を受けることが多いんです。 用紙に詰めて印刷するときデータは必ず「横一列」で印刷しますので、年月日の「出力桁数」が変わっちゃうと、後ろの方でデータが大きく桁ずれします。プレ印刷の縦線などがあるとそこではみ出したり、縦線を印刷するように制御していると、そこで縦線がギザギザになったりします。ですので、「年月日の出力桁数が変わらない」ように処理する方が後で楽なんですね。 特にCOBOLなどを経てきた古いプログラマーに、そういう傾向が強いです(COBOLなどでは先にデータ型を宣言するんで)。プログラミングを教える人は、大概そういう出自を持っているんで、教科書などでも「yyyy/mm/dd」を多用するんですね。 ちなみに私も、Accessで年月日を使うときは、必ず「yyyy/mm/dd」型を使い、前詰めすることはありませんよ。
その他の回答 (2)
- nicotinism
- ベストアンサー率70% (1019/1452)
難しい話はされているようなので簡単なのを。 2011/12/12 2011/1/12 2011/11/15 2011/5/5 などとソート(並び替え)されていない状態だと、文字数によって凸凹して 見辛いし美しくない?ので 2011/12/12 2011/01/12 2011/11/15 2011/05/05 とした方が好まれるのではと。(データ的には一緒です) 日付時刻型は、内部的には倍精度浮動小数点型で、一日を1としてそれ以下は少数で表わされる。 Accessの場合のシリアル値の起点は 1899/12/30 00:00:00 から始まっています。 ※倍精度浮動小数点型であっても、時分秒単位での計算で誤差が発生する可能性があります。 時給800円であさ8時から夕方5時までバイト 9時間×@800=7200 Accessで (#17:00:00#-#8:00:00#)*24*800 とすると7200 が返ってきますが これは数値が丸められて表示されているだけなので ((#17:00:00#-#8:00:00#)*24*800)-7200 とすると 1.06581410364015E-12 とごく僅かですが違いがあるのが分かります。 単純な計算の答えが合わない理由 http://pc.nikkeibp.co.jp/pc21/special/gosa/eg1.shtml 頭の隅に置いといてください。 なお、9/2とだけ入力すれば、Accessが自動的に今年の年と判断して2011/9/2としてくれます。
- imogasi
- ベストアンサー率27% (4737/17070)
フィールドの書式の問題ではないですか。 1994/06/19のような書式が標準のようです。テーブルのフィールドの「書式」(のドロップダウン)で確認してください。だから教科書では「2011/09/02」のような指定の解説になっているのでは. アクセスのテーブルのデータとしてのフィールドの値は、別途どちらで入力しても同じ値がセットされる。 (文字列でなく)日付・時刻型の場合は違いが無い。 http://support.microsoft.com/kb/210276/ja によると(エクセルの日付時刻のシリアル値とは、少し表せる範囲などが違うが)日付を整数部分、小数点部分は時刻を表すようで、基本はエクセルと同じような考え方に見える。これが日付・時刻のフィールドの値としての最終の姿としての実態です。 これに色々な書式を当てはめて、日付の表示を色々に見せる事が出来る。 参考 http://www.relief.jp/itnote/archives/000261.php