如何通过sql中的计算列计算下一个生日
Posted
技术标签:
【中文标题】如何通过sql中的计算列计算下一个生日【英文标题】:How can I calculate the next birthday by computed column in ssql 【发布时间】:2019-10-02 07:42:49 【问题描述】:我想计算人们的下一个生日 在我的数据库中,我有一个名为 dateofbirth 的列和另一个名为生日的列 我希望能够使用 ssql 中的计算列来计算生日。
(datepart(year,getdate())&datepart(day,[DateofBirth]))
我认为我可以通过数据表务实地做到这一点,但我得到了一个错误。 下面是我的代码。
将birthda作为新的SqlDataAdapter(birthcmd)
Dim birthdt As New DataTable
birthda.Fill(birthdt)
For Each rw As DataRow In birthdt.Rows
Dim dob As String = rw.Item(3)
Dim mdat As Date = FormatDateTime(dob, DateFormat.ShortDate)
Dim bday As Date = (Date.Today.Year & mdat.Month & mdat.Day)
Dim yers As Integer = DateDiff(DateInterval.Year, mdat.Date, Today.Date)
Dim moths As Integer = DateDiff(DateInterval.Month, mdat.Date, Today.Date)
Dim dys As Integer = DateDiff(DateInterval.Day, mdat.Date, Today.Date)
【问题讨论】:
很好,但我想拆分出生日期并自动将年份更改为当前年份。 SQL 无关紧要。Date
在 VB 中是 Date
,无论它来自何处。您可以使用当前日期的Year
和数据库值中的Month
和Day
创建一个新的Date
值。然后,您可以测试该日期是否为过去,如果是,请使用 AddYears
为其添加年份。
好主意我这样做了,但我得到了一个错误。下面是我的代码
好主意我这样做了,但我得到了一个错误。让我编辑我的问题,或者你看看我哪里弄错了
【参考方案1】:
请试试这个命令:
birthcmd.CommandText = "SELECT DateofBirth, " & _
"DATEADD(year, DATEDIFF(year, DateofBirth, fn NOW() ) + (CASE WHEN month(dateofbirth) * 100 + day(dateofbirth) < month( fn NOW() ) * 100 + day( fn NOW() ) THEN 1 ELSE 0 END), DateofBirth) AS Nextbday, " & _
"DATEDIFF(year, fn NOW() , DATEADD(year, DATEDIFF(year, DateofBirth, fn NOW() ) + (CASE WHEN month(dateofbirth) * 100 + day(dateofbirth) < month( fn NOW() ) * 100 + day( fn NOW() ) THEN 1 ELSE 0 END), DateofBirth)) AS Diffyers, " & _
"DATEDIFF(month, fn NOW() , DATEADD(year, DATEDIFF(year, DateofBirth, fn NOW() ) + (CASE WHEN month(dateofbirth) * 100 + day(dateofbirth) < month( fn NOW() ) * 100 + day( fn NOW() ) THEN 1 ELSE 0 END), DateofBirth)) AS Diffmoths, " & _
"DATEDIFF(day, fn NOW() , DATEADD(year, DATEDIFF(year, DateofBirth, fn NOW() ) + (CASE WHEN month(dateofbirth) * 100 + day(dateofbirth) < month( fn NOW() ) * 100 + day( fn NOW() ) THEN 1 ELSE 0 END), DateofBirth)) AS Diffdys " & _
"FROM myBirthdayTable"
【讨论】:
以上是关于如何通过sql中的计算列计算下一个生日的主要内容,如果未能解决你的问题,请参考以下文章