【问题标题】:How can I calculate the next birthday by computed column in ssql如何通过sql中的计算列计算下一个生日
【发布时间】: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 为其添加年份。
  • 好主意我这样做了,但我得到了一个错误。下面是我的代码
  • 好主意我这样做了,但我得到了一个错误。让我编辑我的问题,或者你看看我哪里弄错了

标签: sql vb.net


【解决方案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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多