2012-07-12 2 views
0

내가 가진 DB2 테이블뺄셈을위한 SQL SPLIT 함수?

id  HOURS  HOURSMINUTESECECONDS 
1000 450.5  30:30:30 

시간은 부동 소수점 값이고 HOURSMINUTESSECONDS 내가이 기능을 사용하여 그들을 빼기 문자열 값

입니다 : HOURSMINUTESECONDS 내 행 값이있는 경우

(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 

을하지만, 예를 들어 300 : 30 : 30 또는 3000 : 30 : 30 등은 부분 문자열이 첫 번째 요소 만 취하기 때문에 작동하지 않습니다 (ERROR).

어떻게 해결할 수 있습니까 (SPLIT?)? ":"미터 사이의 모든 값을 가져 오려면 몇 미터입니까? 감사합니다.

답변

1
  • 사용 LOCATE (즉, 문자열의 하위 문자열의 선두로부터의 당신 인덱스를 말한다)
  • 또는, 당신의 문자열의 끝을 기준으로 콜론 참조 :

(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

+0

네, 바로 소리. 수정 됨. –

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