2017-06-16 52 views
1

我試圖使用SQL查詢從SQL查詢從int值一樣31Year,的3個月,30天獲取DOB

1)第一個文本框中包含年如從定義值獲取DOB在3個不同的文本框: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, [email protected],CONVERT(date, GETDATE(),103)) 

select @TempDate as yearcount 

SET @TempDate = DATEADD(MONTH, [email protected] , @TempDate) 

select @TempDate as monthcount 

SET @TempDate = DATEADD(DAY, [email protected], @TempDate) 

select @TempDate as FinalDate 

此功能對於大多情況下工作正常,但它是不正確的二月的一個月,他的出生日期日比今天白天到

注度:對於檢查使用此鏈接http://www.calculator.net/age-calculator.html

1)問題日期:17-02-1986 [或使用任何更大的日期從二月的月從今天就像今天是16日,所以你可以採取17至28或29 FEB計算]

+0

這是非標準的SQL。你正在使用哪個DBMS? –

+0

在MS SQL服務器中,您可以使用[DATEFROMPARTS](https://docs.microsoft.com/zh-cn/sql/t-sql/functions/datefromparts-transact-sql)。 DATEFROMPARTS(年,月,日)它適用於MSSQ 2012及更高版本。 –

回答

0

嘗試逆轉摹您DATEADD計算按以下順序:::

SET @TempDate =DATEADD(DAY, [email protected],CONVERT(date, GETDATE(),103)) 

--select @TempDate as daycount 

SET @TempDate = DATEADD(MONTH, [email protected] , @TempDate) 

--select @TempDate as monthcount 

SET @TempDate = DATEADD(YEAR, [email protected], @TempDate) 

select @TempDate as FinalDate 
0

我認爲這將是更好的使用to_date函數來設置DOB,轉換的年,月,日和整數到一個日期變量。它看起來像你試圖顯示某人基於他們的DOB的年齡,所以這種方法也可以通過找到兩個日期之間的差異來更容易地做到這一點。