从今天的日期 - SQL中减去表值

时间:2016-03-16 20:56:04

标签: sql subtraction getdate

我试图根据他们的加入日期返回某人加入我们团队的年数。但是我得到一个无效的减号操作错误。整个getdate()不是我的朋友,所以我确信我的语法错了。

有人可以提供帮助吗?

SELECT 
  Profile.ID as 'ID', 
  dateadd(year, -profile.JOIN_DATE, getdate()) as 'Years with Org'
FROM  Profile

4 个答案:

答案 0 :(得分:0)

看起来你在使用T-SQL?如果是这样,你应该使用DATEDIFF:

DATEDIFF(year, profile.JOIN_DATE, getdate())

答案 1 :(得分:0)

MySQL解决方案

使用DATE_DIFF功能

  

DATEDIFF()函数返回两个日期之间的时间。

     

DATEDIFF(DATE1,DATE2)

http://www.w3schools.com/sql/func_datediff_mysql.asp

此方法仅需要天数差异。您需要通过除以365来转换为年。要返回整数,请使用FLOOR方法。

在你的情况下,它看起来像这样

SELECT 
  Profile.ID as 'ID', 
  (FLOOR(DATEDIFF(profile.JOIN_DATE, getdate()) / 365)) * -1 as 'Years with Org'
FROM  Profile

这是我创建的一个小提琴

http://sqlfiddle.com/#!9/8dbb6/2/0

MsSQL / SQL Server解决方案

  

DATEDIFF()函数返回两个日期之间的时间。

     

语法:DATEDIFF(datepart,startdate,enddate)

这里需要注意的重要一点是,与MySql对应的不同,SQL Server版本包含三个参数。对于您的示例,代码如下所示

SELECT Profile.ID as 'ID', 
       DATEDIFF(YEAR,Profile.JoinDate,GETDATE()) as difference
FROM Profile

http://www.w3schools.com/sql/func_datediff.asp

答案 2 :(得分:0)

使用this answer中的方法,您可以使用以下查询获得结果:

SELECT 
  Profile.ID as 'ID', 
  YEAR(getdate()) - YEAR(profile.JOIN_DATE) - (DATE_FORMAT(getdate(), '%m%d') < DATE_FORMAT(profile.JOIN_DATE, '%m%d')) as 'Years with Org'
FROM  Profile

答案 3 :(得分:0)

如果这是MS SQL:

    SELECT 
    Profile.ID as 'ID', 
    DATEDIFF(YEAR,Profile.JoinDate,GETDATE())
    FROM  Profile