【问题标题】:Select statement that gives the names,ages, and counrty of birth when female but needs to give DateOfBirth as an age instead of DOB选择在女性时提供姓名、年龄和出生国家但需要将出生日期作为年龄而不是出生日期的声明
【发布时间】:2015-03-20 17:11:34
【问题描述】:

到目前为止我有:

选择全名、出生日期、出生国家 来自学生 WHERE 性别 = F

但是我希望 DateOfBirth 显示为年龄标题下的年龄。

我可以使用这个:(Dateiff("yyyy",DateOfBirth,DATE())) 如果可以的话,我原来的陈述会放在哪里?

【问题讨论】:

  • 您没有显示您的原始表格。您的示例函数不可运行,因此没有人能够将其剪切并粘贴到他们的本地数据库服务器控制台中并运行它。你还没有说你正在使用什么数据库。所以你需要改进这个问题(表格,一些样本数据的插入,你有的查询,它给出的结果,你正在使用的数据库版本,......)。如果不是,人们会通过并否决您的问题,因为您的问题质量低下。
  • 您已将其标记为 mysql,但 DateDiff 语法看起来更像 MSSQL?你能澄清一下哪个是正确的吗?
  • SELECT FullName, DATEDIFF("yyyy", DateOfBirth, DATE()) As Age, CountryOfBirth FROM Students WHERE Gender = 'F' 是我现在的位置,但我希望按天计算年龄但我遇到了麻烦

标签: sql ms-access date


【解决方案1】:
Select FullName, DATEDIFF(year,DateOfBirth,DATE()) , CountryOfBirth FROM Students WHERE Gender = F

您可以修改 DATEDIFF 函数以根据日期而不是年份来计算年龄

【讨论】:

  • SELECT FullName, DATEDIFF("DD", DateOfBirth, DATE())/365 As Age, CountryOfBirth FROM Students WHERE Gender = 'F' 是我使用的,但它返回 '#FUNC!'在年龄领域,为什么会发生这种情况?
【解决方案2】:

您可能不想将datediffyyyy 一起使用,因为这实际上不会正确地为您提供年龄。它会给你从他们出生那年起的岁月。如果某人的生日晚于今天,那么他们将被返回为比他们大一岁。

我要做的是将datediffhourday 一起使用:

datediff(day, DateOfBirth, DATE()) / 365

datediff(hour, DateOfBirth, DATE()) / (24 * 365)

【讨论】:

    【解决方案3】:

    您需要一种正确的方法来计算年龄 - 此处显示了一个示例: https://stackoverflow.com/a/29127001/3527297

    【讨论】:

      【解决方案4】:

      是的,您可以使用 DateDiff 函数来实现这一点。该函数将替换查询中的 DateOfBirth 列,变为:

      SELECT FullName, DATEDIFF(yyyy, DateOfBirth, DATE()) As Age, CountryOfBirth
      FROM Students
      WHERE Gender = F
      

      不幸的是,在 SQL 中存在一些关于闰年的争论。没有直接的方法来处理它们。下面有一个更新的语句,但它的用例很尴尬:

      DECLARE @startDate DATETIME = '1984-01-02'
      DECLARE @endDate DATETIME = '2015-01-01'
      
      Select Case
              When DatePart ( day, @startDate) <= DatePart (day , @endDate )
                  Then DateDiff ( year, @startDate, @endDate)
              When DateDiff (year , @startDate , DateAdd (year , - 1, @endDate)) = - 1
                  Then 0
              Else DateDiff (year , @startDate , DateAdd (year , - 1, @endDate))
          End As DoB
      

      为了简洁/可重用性,您可能需要考虑将此 DateOfBirth 检查放入函数中。

      【讨论】:

      • 我已经使用了您的声明,但想对其进行修改,因此尚未通过的 DOB 不被视为已通过。我该怎么做呢?
      • 已更新本年度,包括闰年检查
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      相关资源
      最近更新 更多