Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MS SQL 2012中获取今年的人员生日、离B日还有多少天以及人员年龄_Sql_Sql Server - Fatal编程技术网

在MS SQL 2012中获取今年的人员生日、离B日还有多少天以及人员年龄

在MS SQL 2012中获取今年的人员生日、离B日还有多少天以及人员年龄,sql,sql-server,Sql,Sql Server,我下面的脚本非常适合显示生日,但它不会在生日那天显示生日,而且我如何为那个人的生日保留一天的时间?最后,这个人在这个生日会多大岁数 剧本是: SELECT * FROM DRIVERS e WHERE 1 = CASE WHEN MONTH(GETDATE()) < MONTH(DATEADD(WK, DATEDIFF(WK, 0, GETDATE())+1,-1)) THEN CASE WHEN

我下面的脚本非常适合显示生日,但它不会在生日那天显示生日,而且我如何为那个人的生日保留一天的时间?最后,这个人在这个生日会多大岁数

剧本是:

SELECT  *
FROM    DRIVERS e
WHERE   1 = CASE WHEN MONTH(GETDATE()) < MONTH(DATEADD(WK, 
                                       DATEDIFF(WK, 0, GETDATE())+1,-1))
THEN CASE WHEN MONTH(DOB) = MONTH(GETDATE()) + 1
            AND DAY(DOB) >= 1
            AND DAY(DOB) < DAY(DATEADD(WK,
                                 DATEDIFF(WK, 0, GETDATE())
                                       + 1, -1)) THEN 1 
    WHEN MONTH(DOB) = MONTH(GETDATE())
            AND DAY(DOB) >= DAY(GETDATE())
            AND DAY(DOB) <= DAY(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))) THEN 1

       ELSE 0 END

ELSE CASE WHEN MONTH(DOB) = MONTH(GETDATE())
            AND DAY(DOB) >= DAY(GETDATE())+1
            AND DAY(DOB) < DAY(DATEADD(WK,
                                 DATEDIFF(WK, 0, GETDATE())
                                       + 1, -1)) THEN 1
       ELSE 0
  END
END

--//    So I need the following:
--//    1. Show birthday on birthday date.
--//    2. Show Days Left until Birthday.
--//    3. Show Age of Person on upcoming birthday.
选择*
来自司机e
式中1=月份(GETDATE())小于月份(DATEADD(WK)时的情况,
DATEDIFF(WK,0,GETDATE())+1,-1))
然后,当月份(DOB)=月份(GETDATE())+1
日(DOB)>=1
和日(DOB)<日(Date)和日(WK,
DATEDIFF(WK,0,GETDATE())
+1,-1)然后1
当月份(DOB)=月份(GETDATE())
和日(DOB)>=日(GETDATE())
和日(DOB)=日(GETDATE())+1
和日(DOB)<日(Date)和日(WK,
DATEDIFF(WK,0,GETDATE())
+1,-1)然后1
其他0
结束
结束
--//因此,我需要以下几点:
--//    1. 在生日那天显示生日。
--//    2. 显示离生日还有几天。
--//    3. 在即将到来的生日上显示人的年龄。
非常感谢您在这方面的帮助。

请尝试以下年龄:

CASE 
  WHEN DATEPART(DAYOFYEAR, DOB) < DATEPART(DAYOFYEAR, GETDATE()) 
    THEN DATEDIFF(YEAR, DOB, GETDATE()) 
  ELSE 
    DATEDIFF(YEAR, DOB, GETDATE())-1 
END
它可能需要一些调整,但在我做一些基本测试时显示了正确的结果。

针对年龄尝试以下方法:

CASE 
  WHEN DATEPART(DAYOFYEAR, DOB) < DATEPART(DAYOFYEAR, GETDATE()) 
    THEN DATEDIFF(YEAR, DOB, GETDATE()) 
  ELSE 
    DATEDIFF(YEAR, DOB, GETDATE())-1 
END
SELECT 
FLOOR(DATEDIFF(DAY, GETDATE(), DATEADD(YEAR,DATEDIFF(YEAR, DOB, GETDATE()), DOB))) AS BDAYin
, FLOOR(DATEDIFF(dd,DOB, GETDATE()+7) / 365.25) AS AGEwillTurn
FROM DRIVERS 
WHERE 1 = (FLOOR(DATEDIFF(dd,DOB,GETDATE()+7) / 365.25))-(FLOOR(DATEDIFF(dd,DOB,GETDATE()) / 365.25))
它可能需要一些调整,但在我做一些基本测试时显示了正确的结果。

针对年龄尝试以下方法:

CASE 
  WHEN DATEPART(DAYOFYEAR, DOB) < DATEPART(DAYOFYEAR, GETDATE()) 
    THEN DATEDIFF(YEAR, DOB, GETDATE()) 
  ELSE 
    DATEDIFF(YEAR, DOB, GETDATE())-1 
END
SELECT 
FLOOR(DATEDIFF(DAY, GETDATE(), DATEADD(YEAR,DATEDIFF(YEAR, DOB, GETDATE()), DOB))) AS BDAYin
, FLOOR(DATEDIFF(dd,DOB, GETDATE()+7) / 365.25) AS AGEwillTurn
FROM DRIVERS 
WHERE 1 = (FLOOR(DATEDIFF(dd,DOB,GETDATE()+7) / 365.25))-(FLOOR(DATEDIFF(dd,DOB,GETDATE()) / 365.25))
它可能需要一些调整,但在我做一些基本测试时显示了正确的结果。

针对年龄尝试以下方法:

CASE 
  WHEN DATEPART(DAYOFYEAR, DOB) < DATEPART(DAYOFYEAR, GETDATE()) 
    THEN DATEDIFF(YEAR, DOB, GETDATE()) 
  ELSE 
    DATEDIFF(YEAR, DOB, GETDATE())-1 
END
SELECT 
FLOOR(DATEDIFF(DAY, GETDATE(), DATEADD(YEAR,DATEDIFF(YEAR, DOB, GETDATE()), DOB))) AS BDAYin
, FLOOR(DATEDIFF(dd,DOB, GETDATE()+7) / 365.25) AS AGEwillTurn
FROM DRIVERS 
WHERE 1 = (FLOOR(DATEDIFF(dd,DOB,GETDATE()+7) / 365.25))-(FLOOR(DATEDIFF(dd,DOB,GETDATE()) / 365.25))

它可能需要一些调整,但在我做一些基本测试时显示了正确的结果。

明白了,谢谢你帮了我很多。。。我会发布我的答案给其他人看,如果有必要,我会调整它。再次感谢!如果他们的生日今年已经过了,那么“直到下一个生日的日子”是不起作用的,仅供阅读本文的任何人参考。明白了,谢谢你帮了我很多。。。我会发布我的答案给其他人看,如果有必要,我会调整它。再次感谢!如果他们的生日今年已经过了,那么“直到下一个生日的日子”是不起作用的,仅供阅读本文的任何人参考。明白了,谢谢你帮了我很多。。。我会发布我的答案给其他人看,如果有必要,我会调整它。再次感谢!如果他们的生日今年已经过了,那么“直到下一个生日的日子”是不起作用的,仅供阅读本文的任何人参考。明白了,谢谢你帮了我很多。。。我会发布我的答案给其他人看,如果有必要,我会调整它。再次感谢!如果他们的生日已经过了,那么“直到下一个生日的日子”是不起作用的,仅供阅读本文的人参考。
SELECT 
FLOOR(DATEDIFF(DAY, GETDATE(), DATEADD(YEAR,DATEDIFF(YEAR, DOB, GETDATE()), DOB))) AS BDAYin
, FLOOR(DATEDIFF(dd,DOB, GETDATE()+7) / 365.25) AS AGEwillTurn
FROM DRIVERS 
WHERE 1 = (FLOOR(DATEDIFF(dd,DOB,GETDATE()+7) / 365.25))-(FLOOR(DATEDIFF(dd,DOB,GETDATE()) / 365.25))