Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server select语句中的sql转换_Sql Server - Fatal编程技术网

Sql server select语句中的sql转换

Sql server select语句中的sql转换,sql-server,Sql Server,下面是一个表格示例。使用sql server 我试图为下面的每个员工提取最大值(登录日期),但数据库中的“登录日期”是数据类型int。 我可以很容易地选择它 select employee,title,max(login_date) from employee group by employee,title 我可以使用子字符串将登录日期(“YYYYMM”)转换为日期变量 set @var_year=select (substring((select login_date),1,4)) 使用变

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

select employee,title,max(login_date) from employee group by employee,title
我可以使用子字符串将登录日期(“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

有几种方法可以做到这一点。 一个是

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

可能是另一种情况。

有几种方法可以做到这一点。 一个是

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

可能是另一个。

那么,查询它的更好方法是什么,因为我希望新的“日期”字段是正确的,而不仅仅是从第一个结果中抓取的。您可以显示预期的结果吗?那么,查询它的更好方法是什么,因为我希望新的“日期”字段是正确的,不仅仅是从第一个结果中抓取你能展示预期的结果吗?我完全同意托尼的观点。它在我们的程序中是一个日期字段,但在数据库中是一个int字段。谢谢托尼,我想我可以用这个。我本来打算给你一个+的,雷班德先生。我不喜欢没有添加样式,也不知道如果没有连字符分隔符,126也会很好。对于那些看不到已删除帖子的人,我完全同意。它在我们的程序中是一个日期字段,但在数据库中是一个int字段。谢谢托尼,我想我可以用这个。我本来打算给你一个+的,雷班德先生。我不喜欢没有添加样式,也不知道如果没有连字符分隔符,126也会很好。对于那些看不到已删除帖子的人,转换(datetime,convert(varchar(6),login_date)+“01'),126)