2015-12-01 120 views
0

如何編寫SQL查詢以數字格式獲取最舊的男性年齡,而不是dob格式?獲取最早的記錄

name dob   date job sex language prof  salary 
------------------------------------------------------------------------- 
mitesh 1981-01-01 2001-01-01 m java architect 3100.00 
ankur 1982-02-02 2001-02-02 m ruby scientist 3200.00 
dhruv 1983-03-03 2001-03-03 m csharp designer 3300.00 
ruchi 1981-01-01 2002-01-01 f php  teacher 4000.00 
+2

你是什麼意思*數字格式*?你的意思是他們的年齡?你到目前爲止嘗試過什麼?我們不是代碼寫作服務。 – Siyual

+0

你的意思是年齡不是dob? – roottraveller

+1

[如何根據出生日期和getDate()]計算年齡(以年計)可能的重複(http://stackoverflow.com/questions/1572110/how-to-calculate-age-in-years-based-在出生日期和getdate) – roottraveller

回答

0

這MySQL查詢選擇最長的男性和 'DBO' 格式轉換到一個年齡

SELECT MAX(TIMESTAMPDIFF(dob, '1970-02-01', CURDATE())) AS age 
FROM dbo.data 
WHERE sex='m' 
+0

感謝它的工作 – Dorjee

1

你可以這樣做:

Select top (1) Name, dob, datediff(YY,[dob],getdate()) as Age 
from dbo.YourTableName 
where sex = 'm' 
order by Age Desc 

這將在SSMS

工作
+0

thanx它的工作 – Dorjee

0

age功能

某些數據庫(如Postgres)提供age函數來計算一對時間戳之間的時間跨度。傳遞單個時間戳意味着當前的日期時間將被用作該對中的第二個。

時區

如果你想有一個精確的年齡你可能關心的時區。

例如,巴黎的新日子早於蒙特利爾。因此,如果在午夜左右運行SQL代碼,如果代碼在具有不同當前默認時區的服務器上運行,則會得到不同的結果。

如果您關心此級別的準確性,請指定配對中的第二個日期。使用一個需要時區來確定當天日期的函數。

String作爲日期時間型

理想情況下,你應該存儲日期時間值日期時間類型。但我猜在這個問題中,你的日期實際上是一個文本值。

字母順序=時間順序

如果日期的出生那列是SQL格式的文本價值,平行於ISO 8601格式,那麼它的字母排序也是一個時間順序排列。所以我們可以直接使用這種排序來找到最古老的值。

LIMIT至獲取第一個行

LIMIT的命令截斷結果集的行的第一x個。按照出生日期按升序排序意味着我們只會得到第一行。

示例代碼

提示:命名列和與結尾下劃線SQL其它目的絕對避免了與關鍵字/保留字的任何碰撞。所以承諾SQL規範。

SELECT name_ , date_of_birth_ , age(timestamp date_of_birth_) AS age_ 
WHERE sex_ = 'm' 
ORDER BY date_of_birth_ ASC 
LIMIT 1 
;