2012-07-12 53 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