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

http://dev.mysql.com/doc/refman/4.1/ja/date-calc …

のページを参考に生年月日カラムよりasにて年齢を出しています。
そこで以下のように年齢を求めたあとwhere句にて条件を絞ったことまでは
良かったのでですがさらにbetweenにて年齢、ここでは20以上30以下を
続けて処理を行いたいのですがerrorになります。

下記SQL分を一度に発行することは可能ですか?


SELECT *, CURDATE(), (YEAR(CURDATE())-YEAR(BIR))- (RIGHT(CURDATE(),5)<RIGHT(BIR,5)) as AGE FROM MYDB where KABETU='A' and NAME='B'



AGE BETWEEN 20 and 30

A 回答 (2件)

MySQLのバージョンアップは?



MySQLは4.1や5.0でかなりの機能拡張をしているので、せっかくアドバイスをもらっても、バージョンが古いためエラーになってしまうことがあります。

■SQL例

SELECT *
FROM (SELECT *,CURDATE(),(YEAR(CURDATE())-YEAR(BIR))- (RIGHT(CURDATE(),5)<RIGHT(BIR,5)) as AGE
FROM MYDB) AS X
WHERE
KABETSU='A' AND NAME='B'
AND AGE BETWEEN 20 AND 30

■注意事項
(1)ver 4.1以降でないと、エラーになるかも知れません。
(2)実体のない「AGE」に条件指定のため、性能は出ません。
    • good
    • 0
この回答へのお礼

HAVINGを使って自己解決しました。ありがとうございました。

お礼日時:2006/03/04 08:45

ちょっと面倒ですが、WHERE句でも年齢を求める式を書いてやれば良いかと。



例) ----------------------------------------------
SELECT
  *,
  CURDATE(),
  (YEAR(CURDATE())-YEAR(BIR))- (RIGHT(CURDATE(),5)<RIGHT(BIR,5)) as AGE
FROM
  MYDB
WHERE
  KABETU='A' AND
  NAME='B' AND
  (YEAR(CURDATE())-YEAR(BIR))- (RIGHT(CURDATE(),5)<RIGHT(BIR,5)) BETWEEN 20 AND 30;
    • good
    • 0
この回答へのお礼

HAVINGを使って自己解決しました。ありがとうございました。

お礼日時:2006/03/04 08:45

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