在c#中仅减去月份和年份

时间:2012-07-28 10:28:53

标签: c# sql linq-to-sql datetime

我的数据库中有一个字段用于保存员工的开始日期。

我想知道本月有多少名员工一周年?

示例,如果员工开始07/12/2012工作,那么如果当前日期为01/12/2013,则为他/她的周年纪念。

这是每个员工07/12/2012的开始日期的格式字符串。我想比较月份和年份(不是日期)。

有人可以告诉我该怎么做吗?

3 个答案:

答案 0 :(得分:3)

Transact-SQL中有MONTHYEAR个函数(假设您使用的是MSSQL)。 (See here

因此,如果您的表格中有DATETIME字段startdate

SELECT * FROM employee WHERE MONTH(startdate)=12 AND YEAR(startdate)=2012

将在2012年12月为所有员工提供1周年纪念。

修改

如果您的表格包含日期字符串,您可以使用SUBSTRING(startdate,3,2)获取当月的月份(作为字符串!)和SUBSTRING(startdate,6,4),或者使用CONVERTPARSE函数将其转换为日期时间(然后使用MONTHYEAR,如上所述)

第二次修改

使用Linq to SQL,它将是

var result = from employees e 
             select e 
             where e.startdate.Month==DateTime.Now.Month 
                   && e.startdate.Year==DateTime.Now.Year;

(仍然假设您的数据库中的startdate列具有DATETIME数据类型...)

答案 1 :(得分:0)

非常简单:

SELECT  *
From    Member m
WHERE
        MONTH(m.CreatedAt) = MONTH(GETDATE())

此外,如果你想要明年的周年纪念日,你可以使用:

SELECT  *
From    Member m
WHERE
        MONTH(m.CreatedAt) = MONTH(GETDATE()) and
        YEAR(m.CreatedAt) = YEAR(GETDATE()) +1

答案 2 :(得分:0)

要在SQL中处理它,请尝试

SELECT *  FROM  [dbo].[Employee]
where (DATEPART(mm, [StartDate]) = Month(GetDate())
AND DATEPART(dd, [StartDate]) = Day(GetDate())

在C#中

var aniveraries = from employee in employees
                  where
                        employee.StartDate.Month == DateTime.Now.Month &&
                        employee.StartDate.Year == DateTime.Now.Year
                  select employee;