2013-09-26 61 views
1

下面是一個表格示例。使用sql-server 我想拉下面的每個員工的最大(登錄日期),但數據庫中的「登錄日期」是數據類型int。 我可以用一個變量來保存一年選擇它足夠簡單,即select語句中的sql轉換

select employee,title,max(login_date) from employee group by employee,title 

我可以使用子到login_date(「YYYYMM」)轉換成日期變量,

set @var_year=select (substring((select login_date),1,4)) 

和一個存儲月份的變量,但是如何將它傳遞給我的主要select語句?

Employee Title   Login_Date    
----------------------------------------- 
Mike  VP   201301 
Amy  CEO   201201      
Joe  Office Mgr 201105 
Andy  Admin Asst 201308 
Joe  Office Mgr 201205 
Andy  Admin Asst 201309 
Joe  Office Mgr 201205 
Andy  Admin Asst 201309 
+0

然後查詢它的更好方法是什麼,因爲我希望新的「日期」字段是正確的,而不是僅從第一個結果中抓取 – Phil

+0

您能顯示預期結果嗎? – Kaf

回答

1

有幾種方法可以做到這一點。 其中之一是

Select m.employee,m.title, 
convert(int,substring(thisisNOTadate,1,4)) as [Year], 
convert(int,substring(thisisNOTadate,5,2)) as [Month] 
From 
(select employee,title,max(login_date) as ThisisNOTadate 
from employee group by employee,title 
) m 

摑誰曾經被稱爲格式YYYYMM字符串login_date了幾次之後就個人而言,我會返工表,以便login_date實際上的東西日期像Convert(DateTime,Convert(VarChar(6), Login_date) + '01'),然後任何日期中需要的部分可以使用標準的日期函數。

因此,基於對ReBand先生您的評論較早然後

select employee,title, 
     max(convert(datetime,Convert(varchar(6),login_date) + '01')) as arealdate 
From employee group by employee,title 

將是另一個。

+0

我完全同意託尼。它在我們的程序中是一個日期字段,但它會轉到數據庫中的一個int字段。謝謝託尼,我想我可以使用它。 – Phil

+0

我打算給你帶一塊Reband先生。我並不樂意不加入風格,即使沒有連字符分隔符,也不知道它會滿意126。 –

+0

convert(datetime,Convert(varchar(6),login_date)+'01'),126)對於那些看不到已刪除帖子的人 –