2016-11-08 28 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子句返回負數,這顯然是不正確的年齡。我如何編輯此代碼以確定一個人的適當年齡?

我知道這些名字不起作用 - 但......但這裏是一些當前數據的圖像。實際的表是 '用戶'

enter image description here

+0

刪除單引號。 *只*使用單引號字符串和日期名稱。另外,你的查詢在MySQL中無法工作。你似乎很困惑。 –

+0

當您運行SELECT DATEDIFF(Persons.DOB,NOW())AS天時;你得到了什麼? –

+1

您是否考慮將參數交換到DATEDIFF? _...或查看[docs](http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff)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

你想要的東西,這樣我相信:

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

那麼請嘗試切換參數:

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

告訴我們您能得到什麼?

相關問題