我在学生表中有一个名为生日的列。我需要找到 12 岁以上的学生。
select ......, age(timestamp 'birthdate') as StudentAge
from students
.....
where StudentAge > 11
我不知道这是否是正确的语法,或者我是否在这种情况下使用了正确的函数
我认为您的大部分困惑来自不熟悉 Postgres 的丰富类型系统及其使用的语法。
在日期/时间函数页面中,age
函数以两种形式列出。假设您想与“今天”进行比较,您需要带有单个参数的表单:
函数:age(timestamp)
返回类型:interval
描述:减去current_date(午夜)
示例:age(timestamp '1957-06-13')
结果:43 年 8 月 3 天
所以,你有一个函数,它接受一个 type 的值timestamp
,并返回一个 type 的值interval
。
该示例显示输入被指定为timestamp '1957-06-13'
; 这只是timestamp
从硬编码值创建类型值的一种方法- 就像在面向对象的语言中创建对象一样。在您的查询中,birthdate
不是硬编码值,而是列名,因此这不是您想要的语法。如果列的类型为timestamp
,则可以直接使用age(birthdate)
;如果没有,您可能需要转换它,例如age(CAST(birthdate AS timestamp))
.
输出的类型是interval
,而不是年数,因此将它与它进行12
比较不太可能做你想要的。相反,您应该将其与另一个interval
值进行比较。与timestamp '1957-06-13'
示例类似,您可以编写interval '12 years'
直接创建一个interval
表示 12 年的值。
所以你的比较看起来像age(birthdate) >= interval '12 years'
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句