【问题标题】:Get DOB from Int Value Like 31Year,3Month,30Days from SQL Query从 SQL 查询中获取诸如 31 年、3 月、30 天的 Int 值的 DOB
【发布时间】:2017-06-16 04:44:00
【问题描述】:

我正在尝试使用 sql 查询从定义 3 个不同文本框中的值中获取 DOB

1) 第一个文本框包含年份,例如: 30

2)第二个文本框包含月份,例如: 03

3)第三个文本框包含天,例如: 30

所以我想要上述值的日期。 我的工作如下:

declare @Year int = 31,
@month int = 4,
@day int = 0

Declare @TempDate Datetime,@TempDayPart int,@TempYearPart int,@TempMonthPart int,@FinalDate datetime,@checkLeapYear int,@chkChkDay int

SET @TempDate =DATEADD(YEAR, -@Year,CONVERT(date, GETDATE(),103))

select @TempDate as yearcount

SET @TempDate = DATEADD(MONTH, -@month , @TempDate)

select @TempDate as monthcount

SET @TempDate = DATEADD(DAY, -@day, @TempDate)

select @TempDate as FinalDate

此功能在大多数情况下都可以正常工作,但对于 feb 月份不正确,因为它的 dob DAY 大于今天的 DAY

注意:检查请使用此链接http://www.calculator.net/age-calculator.html

1) 问题日期:17-02-1986[或使用从今天开始的 2 月的任何更大日期,例如今天是 16 日,因此您可以在 17 日到 28 日或 29 日进行 FEB 计算]

【问题讨论】:

  • 那是非标准的 SQL。您使用的是哪个 DBMS?
  • 在 MS SQL 服务器中你可以使用DATEFROMPARTS。 DATEFROMPARTS(年、月、日)它适用于 MSSQ 2012 及更高版本。

标签: sql stored-procedures date


【解决方案1】:

尝试按以下顺序反转您的 DATEADD 计算:::

SET @TempDate =DATEADD(DAY, -@day,CONVERT(date, GETDATE(),103))

--select @TempDate as daycount

SET @TempDate = DATEADD(MONTH, -@month , @TempDate)

--select @TempDate as monthcount

SET @TempDate = DATEADD(YEAR, -@year, @TempDate)

select @TempDate as FinalDate

【讨论】:

    【解决方案2】:

    我认为最好使用 to_date 函数设置 DOB,将年、月和日整数转换为日期变量。看起来您正试图根据某人的出生日期来显示他们的年龄,因此此方法还可以通过查找两个日期之间的差异来更轻松地执行此操作。

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 2019-11-15
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多