您好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:缺少表达式” 您能帮我这个忙吗?
答案 0 :(得分:1)
答案 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