2012-07-12 19 views
0

我有表在DB2用于减法的SQL SPLIT函数?

id  HOURS  HOURSMINUTESECECONDS 
1000 450.5  30:30:30 

小时浮点值,HOURSMINUTESSECONDS是字符串值

我使用此功能相减:

(HOURS - 
(CAST(substr(HOURSMINUTESSECONDS , 1, 2) AS float) + 
CAST(substr(HOURSMINUTESECONDS , 4, 2) AS float)/60 + 
CAST(substr(HOURSMINUTESECONDS , 7, 2) AS float)/3600)) as diff 

但是,如果我在HOURSMINUTESECONDS行有值在例子300:30:30或3000:30:30等这不会工作(错误),因为子字符串将只采用第一个元素。

那么如何解决这个问题(SPLIT?)?为了充分利用“:”不计米多少个字符? 谢谢

回答

1
  • 使用LOCATE(告诉你一个子的occurence的指数字符串)
  • 或引用相对于你的字符串末尾的冒号:

(HOURS - (CAST(substr(HOURSMINUTESSECONDS , 1, LENGTH(HOURSMINUTESSECONDS) - 6) AS float) + CAST(substr(HOURSMINUTESECONDS , LENGTH(HOURSMINUTESSECONDS) - 4, 2) AS float)/60 + CAST(substr(HOURSMINUTESECONDS , LENGTH(HOURSMINUTESSECONDS) - 1, 2) AS float)/3600)) as diff

+0

它的工作原理。你刚刚错过了最后的-2;它应该写-1。感谢问候 – Dejan 2012-07-12 12:56:59

+0

是的,听起来没错。纠正。 – 2012-07-12 12:58:22

0

你可以使用MOD功能吗?

select 
    (hoursminutesseconds mod 10000) + 
    ((hoursminutesseconds/100) mod 100)/60 + 
    (hoursminutesseconds mod 100)*3600 
from 
(
select replace(hoursminutesseconds,':','') as hoursminutesseconds from table 
) as t 
+0

不,我不能,它是字符串值 – Dejan 2012-07-12 12:36:37