2016-11-08 8 views
0

MySQLでビューを作成しようとしています。ユーザーの電子メール、姓、DOB、および現在の年齢を表示する必要があります。私は、21歳以上のユーザーのみを見せたいと思っています。MySQLで人が21を超えているかどうかを確認する方法

これは私が持っているものです。

CREATE VIEW 'valid_Users' AS 
SELECT Persons.Email AS Email, Persons.FName + ' ' + Persons.LName AS Name, Persons.DOB AS Birth_Date, DATEDIFF(Persons.DOB, NOW()) AS Current_Age' 
FROM Persons 
WHERE DATEDIFF(Persons.DOB, NOW()) > 21; 

問題がWhere句は明らかに正しい年齢ではない負の数を返すということです。どのように私は人の適切な年齢を決定するためにこのコードを編集するだろうか?

私は名前が機能していないことを知っています - まだ...しかし、ここにはいくつかの現在のデータのイメージがあります。

CREATE VIEW valid_Users AS 
    SELECT p.Email, 
      CONCAT(p.FName, ' ', p.LName) AS Name, 
      p.DOB AS BirthDate, 
      TIMESTAMPDIFF('year', p.DOB, CURDATE()) AS CurrentAge 
    FROM Persons p 
    WHERE p.DOB < CURDATE() - INTERVAL 21 YEARS; 
+0

単一引用符を削除します。 *文字列と日付の名前には一重引用符を使用します。さらに、あなたのクエリはMySQLではとにかく動作しません。あなたはむしろ混乱しているようです。 –

+0

SELECT DATEDIFF(Persons.DOB、NOW())AS日を実行すると、何を手に入れますか? –

+1

引数をDATEDIFFにスワップすることを検討しましたか? _...またはDATEDIFFが返す値について[docs](http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff)を見ていますか?_ – Uueerdo

答えて

1

試してみてください。

CREATE VIEW 'valid_Users' AS 
SELECT Persons.Email AS Email, Persons.FName + ' ' + Persons.LName AS Name, Persons.DOB AS Birth_Date, DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), Persons.DOB)), "%Y")+0 AS Current_Age' 
FROM Persons 
WHERE DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), Persons.DOB)), "%Y")+0 > 21; 

OR:

CREATE VIEW 'valid_Users' AS 
SELECT Persons.Email AS Email, Persons.FName + ' ' + Persons.LName AS Name, Persons.DOB AS Birth_Date, TIMESTAMPDIFF(YEAR, Persons.DOB, NOW()) AS Current_Age' 
FROM Persons 
WHERE TIMESTAMPDIFF(YEAR, Persons.DOB, NOW()) > 21; 
+0

ありがとう!最初の人は素晴らしかった! – Jstngoulet

0

ですか

0

まあパラメータを切り替えてみてください:

SELECT DATEDIFF(NOW(), Persons.DOB) AS days; 

は、あなたが何を得るのですか教えてください?実際のテーブルには、私はあなたがこのような何かをしたい推測 "ユーザーの

enter image description here

関連する問題