【问题标题】:Converting birth date to current year将出生日期转换为当前年份
【发布时间】:2019-04-12 02:39:08
【问题描述】:

我的员工档案中有生日年份,目前不允许我在当年创建一个显示该生日的日历,除非我将年份转换为当前年份。我怎样才能进行这种转换? 我尝试为月和日创建临时字段,然后尝试连接年月日以返回日期值。

  Declare @Year1 int = 2019;
  select dateadd(@year1,[year]-1900,dateadd(month(birthdate), 
  [month]-1,dateadd(day(birthdate),[day]-1,0)))
  from vhemployee where employerid<>1 and status=1

【问题讨论】:

  • 请为您使用的 dbms 添加标签

标签: sql date


【解决方案1】:

你想多了。

使用DATEDIFF 查找自birthdate 以来的年数,然后使用DATEADD 将该年数添加到birthdate 以获取他们今年的生日日期。

这里的 CTE 仅包含三个过去的随机日期,代表 birthdate 值。您需要的查询遵循 CTE。

WITH cte AS
(
  SELECT CAST(v.BD AS DATE) AS birthdate
  FROM (VALUES ('19641210'),('19830518'),('20010911')) AS v(BD)
)
SELECT DATEADD(YEAR,DATEDIFF(YEAR,cte.birthdate,GETDATE()),cte.birthdate) AS tybd
FROM cte

结果:

+------------+
|    tybd    |
+------------+
| 2019-12-10 |
| 2019-05-18 |
| 2019-09-11 |
+------------+

【讨论】:

    【解决方案2】:

    可能最简单的方法是使用 SQL Server 中的 DateFromParts 函数。

    声明@Year Int = 2019

    选择 DATEFROMPARTS (@Year, Month(BirthDate), Day(BirthDate)) 来自 VhEmployee 在哪里 Employerid 1 AND [状态] = 1

    【讨论】:

    • declare @year int = 2019 select datefromparts(@year,month(birthdate).day(birthdate)),birthdate,* from vhemployee where employeeid1 and status=1 导致此错误消息174, Level 15, State 1, Line 2 datefromparts 函数需要 3 个参数。
    • 我将前一天的时间段更正为逗号并收到此错误消息 289,级别 16,状态 1,第 3 行无法构造数据类型日期,某些参数的值无效。
    • 我相信你的表有非日期值。那些正在引起问题。 试试这个: declare @year int = 2019 select datefromparts(@year,month(birthdate), day(birthdate)), birthdate,* from vhemployee where employerid&lt;&gt;1 and status=1 AND ISDATE(birthdate) = 1
    • 我想知道我是否有一些出生日期是 02-29,而转换为 2019 是无效日期。
    • 是的,有些日期是 02-29。您需要编写类似这样的 SQL。 declare @year int = 2019 select CASE WHEN Month(BirthDate) = 2 AND Day(BirthDate) = 29 THEN Null ELSE datefromparts(@year,month(birthdate), day(birthdate)) END As ThisYearDate, birthdate,* from vhemployee where employerid&lt;&gt;1 and status=1 AND ISDATE(birthdate) = 1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多