2017-05-02 22 views
-1

TABLE:MYSQLで年齢を計算するには?

ID pet_aggg pet_year pet_month pet_date 
1  birth  0   0   02/03/2017 
2  birth  0   0   05/02/2017 
3  birth  0   0   12/01/2017 
4  age   10   6   0 
5  age   6   8   0 

私は4ヶ月未満のすべてのペット場所ペットの年齢を計算します。

問合せ:私の新しいクエリで

SELECT count("*") as Total 
FROM `pet_info` 
CASE WHEN `pet_info` == 'birth' 
    THEN `pet_date` HAVING BETWEEN >= '02/01/2017' AND <= '02/05/2017' 
CASE WHEN `pet_info` == 'birth' 
    THEN `pet_month` HAVING <= 4; 

は、私はすべてのデータを選択したいところ4ヶ月未満のペット。

SELECT * FROM `pet_info` 
CASE WHEN `pet_info` == 'birth' 
    THEN WHERE `pet_date` BETWEEN >= '02/01/2017' AND <= '02/05/2017' 
CASE WHEN `pet_info` == 'birth' 
    THEN WHERE `pet_month` <= 4; 
+0

https://meta.stackoverflow.com/questions/333952/を参照してくださいを使用することができますなぜなら、私が提供しようとしているのは、単純なSQLクエリであると考えられるからです。 – Strawberry

+0

SELECT * FROM 'pet_info' where(CASE WHEN' pet_info' = = '出生'それから 'ペットデート'は'02/01/2017 'と'02/05/2017'の間に 'pet_info' == 'birth' THEN' pet_month' <= 4); – JYoThI

+0

@JYoThI SELECT * FROM 'pet_info'ここで(CASE WHEN' pet_info'.pet_aggg' == 'birth' THEN 'pet_info'.pet_date'と'02/01/2017 'と'02/05/2017'との間'pet_info'.pet_aggg == '年齢'それから' pet_info'.pet_month' <= 4); SQL SYNTAX ERROR –

答えて

0

WHERE条件CASEあなたは基本的な構文に問題がたくさんあるこの

SELECT * FROM pet_info 
where (CASE WHEN pet_info = 'birth' 
      THEN pet_date BETWEEN '02/01/2017' AND '02/05/2017' 
      WHEN pet_info = 'age' THEN pet_month <= 4 END); 
+0

' CASE'に同じ 'WHEN'節を2回持つことは意味がありません。 'CASE'の' END'も欠けています。 – Barmar

+0

THANKSSS @Barmar – JYoThI

0

ようにする必要があります。 SQLクエリ(簡体字)の構文は次のとおりです。

SELECT some cols 
FROM tableName 
WHERE conditions 

あなたはCASE式の内WHEREを入れないでください。 BETWEENを使用する場合は、>=<= - x BETWEEN y AND zx >= y AND x <= zの略ではありません。

もう1つの問題は、日付が比較のために適切にフォーマットされていないことです。 pet_date BETWEEN '02/01/2017' AND <= '02/05/2017'を実行した場合、02/03/2016の日付は日付比較ではなく辞書編集の比較を行っているため、一致します。その列をCHARではなくDATEデータ型に変更する必要があります。これを行うことができない場合は、STR_TO_DATE()を使用して比較する日付に変換する必要があります。

クエリは、次のようになります。

SELECT * 
FROM pet_info 
WHERE (pet_aggg = 'birth' AND STR_TO_DATE(pet_date, '%d/%m/%Y') BETWEEN '2017-01-02' AND '2017-05-02') 
    OR (pet_aggg = 'age' AND pet_month <= 4) 

、代わりにクエリに特定の日付を入れて、あなただけのSTR_TO_DATE(pet_date, '%d/%m/%Y') >= DATE_SUB(NOW(), INTERVAL 4 MONTH)

関連する問題