将nvarchar月份字段+浮动年份字段合并并转换为单个日期字段



我在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

最新更新