Sql 合并并转换nvarchar月字段+;将年份字段浮动到单个日期字段
我在SQL Server 2012中有一个表,其中一个月列存储为Sql 合并并转换nvarchar月字段+;将年份字段浮动到单个日期字段,sql,sql-server,string,tsql,datetime,Sql,Sql Server,String,Tsql,Datetime,我在SQL Server 2012中有一个表,其中一个月列存储为nvarchar(255): 表中的另一列,年份单独存储为float "2012","2013,"2014". 我没有“日”列,因此我希望创建一个合并的“月日期”列,日期从1开始 因此,月份和年份字段为2012年1月。我想展示“2012-01-01” 我如何才能这样做并将其添加到当前表中 我想在我的表中为每个员工查找记录的最大行数。 所以对于一个[雇员],[月],[年]。最新记录是
nvarchar(255)
:
表中的另一列,年份单独存储为float
"2012","2013,"2014".
我没有“日”列,因此我希望创建一个合并的“月日期”列,日期从1开始
因此,月份和年份字段为2012年1月。我想展示“2012-01-01”
我如何才能这样做并将其添加到当前表中
我想在我的表中为每个员工查找记录的最大行数。
所以对于一个[雇员],[月],[年]。最新记录是什么,例如:
1. 102, Jan, 2019
2. 102, feb, 2019
我只想看第二条最新的记录。修复您的设计!存储数据的方式使得解释数据的效率非常低。在这里,我认为最简单的选项是
datefromparts()
和12个分支case
表达式
假设(浮动)年存储在列col\u year
中,(字符串)月存储在col\u year
中:
select t.*,
datefromparts(
cast(col_year as int),
case col_month
when 'January' then 1
when 'February' then 2
...
when 'December' then 12
end,
1
) as date_col
from mytable t
SQLServer具有相当灵活的转换功能。因此,只需将列转换为日期:
select convert(date, month + ' ' + year)
您可以通过以下方式获得最大值:
select empid, max(convert(date, month + ' ' + year))
from t
group by empid;
如果您真的喜欢,可以更改格式以用于输出目的。不过,我建议您坚持使用日期
注意:这假设您的国际化设置设置为英语——如果您使用英语存储月份名称,这似乎是合理的。您尝试了什么?你在哪里卡住了?让我们看看你的尝试。请每个问题只问一个问题。谢谢,我同意。数据是从excel上传的,并且是这种格式的,所以我想修改设计以正确存储数据
select empid, max(convert(date, month + ' ' + year))
from t
group by empid;