アプリ版:「スタンプのみでお礼する」機能のリリースについて

Accessの関数でdatediff関数というのがありますが、それを使う時に
Datediff("yyyy",,)などと入力しますが、なぜDatediff関数では年、月などの表示形式を""でくくるのでしょうか?
""は文字列を表すのではないのでしょうか?
日付は##で囲まれるのでDatediff(#yyyy#,)ならわかるのですが。
重箱の隅をつつくような質問で申し訳ないのですが、""で囲むことに納得がいきません。
なぜ""で囲むのでしょうか?

A 回答 (6件)

>Datediff("yyyy",,)


の"yyyy"は関数に与える引数で日付を表すものではありません
(この引数はテキスト型で与えるという仕様です)

>#yyyy#
も日付を表すものではありませんよ
日付を表すには
#2008/08/25#
のように中が日付文字列でなければだめです

DateDiffでも日付を取る第2,3引数には下のように日付を与えます

DateDiff("yyyy",#1900/1/1#,Date())
    • good
    • 0
この回答へのお礼

引数をテキスト型で与えて結果を数値で返すという使用なのですね。
理解できました。
ありがとうございました。

お礼日時:2008/08/27 13:19

>Datediff関数の結果は「26」など数値で表示されますね?


なのでなぜ文字列で指定するのかわからないです.
(#1のお礼)
関数の戻り値のデータタイプと引数のデータタイプと同一に論じることはおかしい。。
質問の件も、関数のお約束なので、議論しても、実効性は無い。
関数の処理を作る開発者の決め次第、受けとりから次第と思う。
私の感じる例(それぞれ深い意味があって、知らないだけかも判らないが)
エクセルでもSUMIFの第2引数は >60 でよいと思うが
=SUMIF(D1:D5,"=>60",D3:D5) と書かせるような例があって、個人的にはなくてもよかろうと思う。
Rangeでもエクセル関数はほとんどセル範囲を D1:D3のように入力するが、VBAではRange("D1:D3") である。
    • good
    • 0
この回答へのお礼

たいへんよくわかりました。
ありがとうございました。

お礼日時:2008/08/27 13:17

#2の方のが正解です。


Datediff関数の始めの引数は時間間隔を表すだけの文字列です。
日付を表す数値ではないので日付表示の##で囲むことはしません。
ちなみにEXCELで使えるDATEDIF関数(LOTUS1-2-3との互換関数)でも
=DATEDIF(A1,B1,"y")
のように時間間隔の引数は""で囲みます。
どうしても納得できないならテキスト形式の変数を使ってください。

詳細は下記を参照
http://www.accessclub.jp/supbeg/042.html
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2008/08/27 13:22

元々、Basicに日付に関する定数の書き方が無いから



例えば A = 2008/08/25 と記述した場合
VBAでは型の自動変換があるので 2008÷08÷25 の結果をAに代入する事になる

また、#は数値を表す意味で使われてますから##で囲むは紛らわしい

なので日付を定数で書く場合は文字列として記述するようになったと思われます。

AccessのSQLなど新しい物はその辺の考慮がされている為かも
(こっちのケースがまだ少ない)

同じDBでも昔からあるものはやはり文字列で型変換して代入する方法をとっている物があります。

進化の過程にあるものに関し使えないから可笑しいと言ってあげるのはかわいそうです。
別に文字列でも問題にならないでしょうから。
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2008/08/27 13:21

表示形式ですから、日付は##で囲まれる云々は見当違い。

    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2008/08/27 13:20

>""で囲むことに納得がいきません。



文字列として指定しないといけないからです。
多言語も含めて、一般的には#で区切る方が変なのです。
検索やフィルタ・SQLでは、日付型フィールド専用の指定で特殊な指定方法になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Datediff関数の結果は「26」など数値で表示されますね?
なのでなぜ文字列で指定するのかわからないです。

お礼日時:2008/08/25 19:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!