减去日期,以年为单位

时间:2018-11-08 08:50:17

标签: sql oracle date

您好evreryone我正试图减去两个日期以求出年份的差异。

select round(date '99-11-05' - date '69-05-21')/365 from dual;

当我获得输出30.47945205479452054794520547945205479452时,这工作正常。

我有一个表RAP07,其中有两个日期字段BIRTHDT_T和SPRODT_T,如果我将两者都相减,那么我应该以岁为单位。

我尝试了以下查询:

select round(date BIRTHDT_T - date SPRODT_T)/365 from rap07;

但是我收到了错误消息“ ORA-00936:缺少表达式” 您能帮我这个忙吗?

4 个答案:

答案 0 :(得分:1)

您可以在下面尝试

DEMO

select floor(months_between(date SPRODT_T, date BIRTHDT_T) /12) from rap07;

输出:

YR
32

答案 1 :(得分:0)

在您的第一次选择中,您只会得到一个结果,该结果很好。在第二个查询中,您尝试获取带有结果的列,这会导致错误,因为您没有命名该列。另外,您在两个查询中都使用关键字date。此关键字仅用于确定新日期,而不用于解决日期。尝试此查询是否有效:

SELECT ROUND(BIRTHDT_T - SPRODT_T)/365 AS years FROM rap07;

答案 2 :(得分:0)

首先,您不能在表中的已经定义的列之前使用“日期”。这就是您收到该错误的原因。

选项1

Oracle中有一个函数可以从日期数据类型(varying vec2 vTexCoord; void main () { vec4 color1 = texture2D(sTexture, vec2(vTexCoord.x*2.0, vTexCoord.y)); vec4 color2 = texture2D(sTexture, vec2(vTexCoord.x*2.0-1.0, vTexCoord.y)); gl_FragColor = vTexCoord.x < 0.5 ? color1 : color2; } 的列中提取年份

EXTRACT(YEAR FROM COLUMN)

因此,您实际上不需要拆分和四舍五入。

选项2

如果您仍然想使用提到的表达式(不使用EXTRACT),则可以这样操作:

select round(EXTRACT(YEAR FROM BIRTHDT_T) - EXTRACT(YEAR FROM SPRODT_T)) from rap07;

答案 3 :(得分:0)

您最好使用

TRUNC(MONTHS_BETWEEN(SPRODT_T, BIRTHDT_T)/12)

FLOOR(...)而不是TRUNC(...)一样。

否则,您可能会得到错误的结果,例如为此:

ROUND(DATE '2018-02-28' - DATE '2010-03-01')/365 -> 8.0027397260274