sql语句高手来帮帮忙!!看看这个语句怎么写

cloud_soft 2005-08-11 09:44:46
一个table中有一个日期字段fld_a,一个字符串字段fld_b.
fld_a取得格式为"2005/01/01"的日期数据。
fld_b可以取得格式为"2500"的数据,前两位数字是小时,后两位是分钟。
现在要把fld_b的小时加到fld_a上,然后和后两位的分钟组合成一个日期,例子中组合后的日期应该为
2005/01/02 01:00 。我要取得table中所有这个组合日期大于当前系统日起的数据,不知道一个sql语句能不能解决阿?
...全文
144 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyixiang 2005-08-12
  • 打赏
  • 举报
回复
为什么你的小时数大于24呢?麻烦,看下面。

select * from tablename where (fld_a + interval to_char(TRUNC(to_number(substr(fld_b,1,2))/24))||' '||to_char(MOD(to_number(substr(fld_b,1,2)),24))||':'||substr(fld_b,3,2) day to min)>sysdate

没测试,自己看看行不?


只要你fld_b的分钟数是小于59的就没问题,不然更复杂,如下:
select * from tablename where (fld_a + interval to_char((TRUNC(to_number(substr(fld_b,1,2))+TRUNC(to_number(substr(fld_b,3,2))/60))/24))||' '||to_char(MOD((to_number(substr(fld_b,1,2))+TRUNC(to_number(substr(fld_b,3,2))/60)),24))||':'||substr(fld_b,3,2) day to min)>sysdate
gerardchina 2005-08-12
  • 打赏
  • 举报
回复
學習bzszp(SongZip)的方法,好用.
nowait 2005-08-12
  • 打赏
  • 举报
回复
呵呵,这个有点意思,考虑到fld_b=2370这种情况,我这样处理:
select * from tab_name where
to_date(to_char(fld_a+round((substr(fld_b)+round(substr(fld_b,3)/60))/24),'yyyy/mm/dd')||' '||
mod((substr(fld_b,1,2)+round(substr(fld_b,3)/60))/24)||':'||
mod(substr(fld_b,3)/60),'yyyy/mm/dd hh24:mi')>sysdate;

上面条件语句中,第一行是天,第二行是小时,第三行是分钟
waterfirer 2005-08-12
  • 打赏
  • 举报
回复
bzszp(SongZip)不是已经解决了吗,我看那个办法就挺好。
AndyFunction 2005-08-12
  • 打赏
  • 举报
回复
关注
feng2 2005-08-12
  • 打赏
  • 举报
回复
select * from table
where to_date(replace(fld_a','/','') + floor(substr('fld_b',1,2)/24) || substr('fld_b',1,2) - floor(substr('fld_b',1,2)/24)*24 || substr('fld_b',3,2),'yyyy-mm-dd:hh24:mi') > sysdate;


SQL> select to_date(replace('2005/05/05','/','') + floor(substr('2512',1,2)/24) || substr('2612',1,2) - floor(substr('2612',1,2)/24)*24 || substr('2612',3,2),'yyyy-mm-dd:hh24:mi') "完整最后组合的时间" from dual;

完整最后组合的时间
------------------
2005-5-6 2:12:00

Executed in 0.031 seconds

SQL>
heyixiang 2005-08-12
  • 打赏
  • 举报
回复
经过验证,我的方法不行。
沝林 2005-08-12
  • 打赏
  • 举报
回复
这样的话小时和分钟都可以是任意数字了,先转换为分钟,然后转换为interval day to second就可以了

SQL> select to_date('2005/01/01','yyyy/mm/dd')
2 + numtodsinterval(substr(2500,1,2)*60 + substr(2500,3),'minute')
3 from dual;

TO_DATE('2005/01/01','YYYY/MM/
------------------------------
2005-1-2 1:00:00
kongkongye 2005-08-12
  • 打赏
  • 举报
回复
select * from tbname
where trunc(fld_a)+substr(fld_b,1,2)/24+substr(fld_b,3)/(60*24)>sysdate;
bzszp 2005-08-12
  • 打赏
  • 举报
回复
try:
select * from tbname
where to_date(fld_a,'yyyy/mm/dd')+substr(fld_b,1,2)/24+substr(fld_b,3)/(60*24)>sysdate;
牧牛人软件 2005-08-11
  • 打赏
  • 举报
回复
错了一点

SELECT * FROM TAB
WHERE (fld_a || ' ' || Substr(fld_b,1,2) || ':' || Substr(fld_b,3,2) ) >to_char(sysdate, 'yyyy/mm/dd h24:mi')

牧牛人软件 2005-08-11
  • 打赏
  • 举报
回复
SELECT * FROM TAB
WHERE (fld_a || ' ' || Substr(fld_b,1,2) || ':' || Substr(fld_b,3,2) ) >to_char(system, 'yyyy/mm/dd h24:mi')

需要解释吗?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧