1

这是一个表格示例。使用 sql-server 我试图为下面的每个员工提取最大(登录日期),但数据库中的“登录日期”是数据类型 int。我可以很容易地选择它,即

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))

使用一个变量来存储年份和一个变量来存储月份,但是如何将它传递给我的主选择语句?

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
4

1 回答 1

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

将是另一个。

于 2013-09-26T21:48:09.537 回答