BDEのローカルSQLで、
システム日付から年齢を算出する方法を教えてください。
いろいろ試してみましたが、機能は使用できませんと怒られます。
何をしてエラーでたか知りたいけどなぁ。
サウザーさんの環境で下記の関数が使えるかな?
とりあえず参考までに。
YEAR(CURRENT DATE - DATE('1995-01-01'))
年齢計算したことないので,
うるう年等の年齢算出にあたり注意点などは把握してないので
不備はあると思います。
Ru様
ご回答ありがとうございます。
>>YEAR(CURRENT DATE - DATE('1995-01-01'))
delphi3のdatabase explorerで試してみましたが、残念ながら
「YEAR(CURRENT」のところでキーワード無効のエラーがでます。
データはdbase4です。
私が試したことは、
Age(生年月日)、
DATEDIFF(YEAR,生年月日,システム日付)、
TRUNC(MONTHS_BETWEEN(システム日付,生年月日)/12)です。
いずれも「その機能は使用できません」というエラーメッセージがでました。
システム日付は「CURRENT DATE」で記載すればいいのでしょうか?
関数一覧とか資料があればよかったのですが、未だ発見できずです。
できればパラメータ等は使わずに、SQLだけで年齢算出したいのですが、
ご教授いただけると助かります。よろしくお願いします。
>関数一覧とか資料があればよかったのですが、未だ発見できずです。
Delphi5ですが、
C:\Program Files\Common Files\Borland Shared\BDE にある
ローカルSQLガイド(LOCALSQL.HLP)の関数一覧ページ
によると、
>ローカル SQL は,以下のデータ操作言語(DML)関数をサポートします。
>
>文字列関数 解説
>----------------------------------------------
>結合関数 2 つの文字列を結合します。
>LOWER 文字列を小文字に変換します。
>UPPER 文字列を大文字に変換します。
>SUBSTRING 1 つの文字列から,その一部を取り出します。
>TRIM 文字列の左端,右端,または両端から特定の重複文字を削除します。
>
>集合関数 解説
>----------------------------------------------
>AVG 1 つの列から,NULL 値以外のすべての数値の平均を求めます。
>COUNT 結果セットの行数を求めます。
>MAX 列の最大値を求めます。
>MIN 列の最小値を求めます。
>SUM 列の全数値を合計します。
>
>データ型関数 関数
>----------------------------------------------
>CAST あるデータ型を別のデータ型に変換します。
>EXTRACT 日付から年,月,日をそれぞれ表すフィールドを抽出します。
だそうです。
年齢を求めるSQLは知らないけど逆の発想で...
SQLを発行する前に、先に年齢から生年月日の範囲を求めて
それを、betweenで条件にしたらだめなんだろうか?
(例:30歳 1978-04-01 〜 1979-03-31)
igy様
通りがかり様
Delphi3のBDEにもローカルSQLのヘルプがありました。
内容的にはかなりショックです。
やはり、SQLでシステム日付を取得することはできないのですね。
ソース的には通りがかり様の
おっしゃられている方法で解決しました。
皆様、どうもありがとうございました。
計算項目にすればどうでしょう。
これなら、Delphi側で計算できます。
ツイート | ![]() |