2016-11-23 1 views
4

나는 시간을 분으로 변환 할 정규 표현식을 작성하려고합니다. 현재 점 앞에는 시간 수를, 점 뒤에는 분을 나타내는 값이 있습니다. 예를 들어, 6.10은 6 시간 10 분입니다.SQL에서 시간을 분으로 변환

도트 앞에 값을 찾고 분을 얻기 위해 60을 곱하고 그 다음에 도트 뒤에 값을 추가하려면 정규 표현식을 사용할 수 있습니까? 이전에 사용의 예에 따라

그래서, 그것은 할 것 : (6 * 60)

+ 10

감사합니다! 당신의 가치 "6.10"이 문자열로 저장되어 있으면

+0

Teradata 정규 표현식을 사용하지 않았지만 ..... 아니오. 정규 표현식은 문자열의 내용을 찾습니다. 그들은 계산을하지 않습니다. 값을 추출하여 별도로 수행해야합니다. –

+0

내가 어떻게 할 수 있는지 알고 있니? 나는 DATEPART (hh, field)를 사용하여 시도했지만 hh가 이제 정의 된 타입 이름이라는 오류 메시지를 되돌려줍니다. 감사합니다 – user7172167

+1

검색하는 필드의 데이터 유형은 무엇입니까? –

답변

1

정규식은 이러한 간단한 문자열 조작에 대한 과잉 공격 일 수 있습니다. 필요한 것은 도트의 위치와 SUBSTR 함수를 얻는 INDEX 함수 만 있으면 시간과 분을 얻을 수 있습니다.

점 위치 : 도트 (전)

select INDEX([yourstring], '.') 

시간 :

select SUBSTR([yourstring], 1, INDEX([yourstring], '.') - 1) 

분 도트 (후) :

select SUBSTR([yourstring], INDEX([yourstring], '.') + 1) 
+0

정말 고마워요! – user7172167

+0

여러분을 환영합니다! 이것이 네가 한 일이라면 대답을 받아 들여라. – under

+0

확실히, 어떻게해야합니까? 죄송합니다. 저는이 포럼에서 매우 새롭습니다! – user7172167

2

, 먼저 숫자로 변환 :

SET @Input = CAST(@InputString AS FLOAT) 

그런 다음, ModulusFloor를 사용합니다.

총 분은 = 소수 부분 * 100 + 전체 숫자 부분 * 귀하의 값 6.10이 @Input라는 변수에 포함되는 경우

(60) 그래서, 당신은 당신이

으로 원하는 값을 얻을 수 있습니다 이 테이블에 있다면
SET @Output = (@Input % 1) * 100 + FLOOR(@Input, 0) * 60 

후 더 이런 일이 적절할 것 : 분 예를 들어 제로 패딩, 경우

SELECT (Input % 1) * 100 + FLOOR(Input, 0) * 60 Output 
FROM Table 

위에만 작동 6 시간 5 분 = 6.05. 패딩없이 분을 나타내는 경우 (6 시간 5 분 = 6.5), under에서 제안하는 방법을 사용하십시오.

+0

'ROUND', 더 나은'TRUNC' 또는'CAST (AS INT)'를하지 마십시오. '6.55'에 접근 해보세요 :) – dnoeth

2

문자열을 토큰 화하는 STRTOK 기능이있다 다음은 단지 :

select '12.34' as x, 
    cast(strtok(x,'.',1) as int) * 60 + cast(strtok(x,'.',2) as int) 
관련 문제