如何通过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 和数据库值中的MonthDay 创建一个新的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中的计算列计算下一个生日的主要内容,如果未能解决你的问题,请参考以下文章

如何使用条件计算 SQL (Oracle) 中的多个列?

SQL计算年龄

如何计算sql中where语句中的行数?

SQL中的条件计算列

根据 SQL 中的日期计算百分位数

SQL语句如何根据出生日期计算年龄