【问题标题】:SQL Select query using current date time to get the users ages? [duplicate]SQL Select 查询使用当前日期时间来获取用户年龄? [复制]
【发布时间】:2016-03-22 13:53:37
【问题描述】:

我想从当前系统日期的表中查找年龄,例如 20 到 30 岁之间。

以下是我的餐桌详情:

GivenName           DOB
  Raj       1950-06-06 00:00:00.000
  Rahul     1951-01-06 00:00:00.000
  Mohan     1952-11-09 00:00:00.000
  khan      1953-07-24 00:00:00.000

【问题讨论】:

  • 您使用的是哪个 dbms?在日期/时间方面,太多产品与 ANSI SQL 相去甚远。 DOB 列的数据类型?
  • sql server 2008.@jarlh
  • @Matt Gibson:你是对的。 dotjoe 的答案看起来比这里给出的任何答案都好。

标签: sql sql-server sql-server-2008


【解决方案1】:

例如,在 20 到 30 之间

使用DATEDIFF:

SELECT Age = DATEDIFF(year, DOB, GetDate()),
       Between20_30 = CASE WHEN DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30
                      Then 'yes' ELSE 'no' END
FROM dbo.Table1

Demo

如果您想按 20 到 30 岁的人进行过滤,请使用 WHERE 子句:

WHERE DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30

由于DATEDIFF 不精确(将 12/31 和 01/01 之间的月差视为一个月),如果这是一个问题,您可以使用this 方法。

【讨论】:

  • 小心使用 DATEDIFF。这种方式的年龄计算不会很精确。函数四舍五入。
  • 我需要那些年龄在 20 到 30 岁之间的记录。
  • @Tom:上帝的观点,如果这是一个问题,他可以使用this 方法。
  • @zahed:然后使用WHERE DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30。我已经编辑了我的答案以包含它。
  • SELECT Age = DATEDIFF(year, DOB, GetDate()), Between20_30 = where DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30 FROM Table_RegistrationInfo.. 关键字“where”附近的语法不正确'。出现错误..
【解决方案2】:
select GivenName,Age = DATEDIFF(year, DOB, GetDate())
FROM [dbo].[AgeCalc] where DATEDIFF(year, DOB, GetDate()) BETWEEN 20 AND 30

【讨论】:

    【解决方案3】:

    不要使用DATEDIFF。使用DATEDIFF(year, ...) 时,只考虑日期的年份部分。因此,确切的生日无关紧要,您会考虑那些 20 岁尚未满 20 岁的人。

    今天2015-12-26 你会想要出生在1984-12-171995-12-16 之间的人。

    • 1984-12-17(今天减去 31 年加上一天)表示该人明天将获得 31 岁
    • 1995-12-16(今天减去 20 年)表示该人今天刚满 20 岁。

    所以:

    select *
    from persons
    where convert(varchar, dob, 102) 
            between convert(varchar, dateadd(day, 1, dateadd(year, -31, getdate())), 102)
                and convert(varchar, dateadd(year, -20, getdate()), 102);
    

    (我必须承认,我懒得去想 2 月 29 日的事情了。)

    【讨论】:

    • 你能根据上面我的表格详细信息更新答案吗?
    • 我在您的表格详细信息中看到的只是出生日期列称为 DOB。我用那个。那我还应该考虑什么?
    • 这是一个 SQL fiddle,说明 DATEDIFF(year, ...) 不适合计算年龄:sqlfiddle.com/#!6/9eecb7db59d16c80417c72d1/3740
    • 请以我的问题为例。
    • 对不起,我不明白你的意思。您举了一个包含 GivenName 和 DOB 以及四条记录的表的示例;我给你一个查询,从中选择 20 到 30 岁的人。你还想要什么?您是否尝试过我的查询,但它对您不起作用?如果是这样,在什么意义上它不适合你?
    猜你喜欢
    • 2020-04-04
    • 2020-04-04
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2016-07-20
    • 2016-07-04
    相关资源
    最近更新 更多