我在SQL Server 2012中有一个表,其中一个月列存储为nvarchar(255)
:
"January", "February", "March"
该表中另一列的年份作为浮动单独存储
"2012","2013,"2014".
我没有日期列,所以我想创建一个合并的月份日期列,日期从1开始。
因此,对于月份和年份字段,2012年1月。我想展示"2012-01-01">
我如何才能做到这一点并将其添加到我当前的表中?
我想在表中为每个员工找到记录的最大行数。对于[员工#],[月],[年]来说也是如此。最近的记录是什么,例如下面的:
1. 102, Jan, 2019
2. 102, feb, 2019
我只想看最新的第二张唱片。
SQL Server具有非常灵活的日期转换功能。因此,只需将列转换为日期:
select convert(date, month + ' ' + year)
您可以获得最大值为:
select empid, max(convert(date, month + ' ' + year))
from t
group by empid;
如果您真的喜欢,您可以出于输出目的更改格式。不过,我建议你坚持使用date
。
注意:这假设您的国际化设置设置为英语——如果您用英语存储月份名称,这似乎是合理的。
修复您的设计!存储数据的方式使得解释数据的效率非常低。在这里,我认为最简单的选项是datefromparts()
和一个12分支的case
表达式。
假设(浮动(年存储在列col_year
中,而(字符串(月存储在col_month
:中
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