2016-09-15 3 views
1

에서 SS 형식 I는 UNIX 시간 2 개 필드 (login,logout) INTEGER 유형이,하지만 난 DBINFO가 반환 사용하여 뺄셈 (logout-login) 할 때 : 0 05:50:23를,하지만 난 그 값을해야합니다 없이 첫 번째 숫자 (이 경우 0). 내가 인포믹스 (11)를DATETIME - HH에서 DATETIME : MM : 인포믹스

사용하고

입니다 표현은 내가 사용

DBINFO('utc_to_datetime', logout) - 
DBINFO('utc_to_datetime', login) 

결과 :

0 5시 50분 23초

방법 선두의 0을 없앨 수 있습니까?

+0

SUBSTRING (DBINFO ('utc_to_datetime', login), 2, 8)? –

+0

은 2 개의 값 중 하나만 리턴합니다. 내가 원하는 것은 첫 번째 0이없는 결과입니다. 나는 뺄셈의 결과가 간격이라는 것을 알고 있지만, 어떻게 표현 할지를 모르겠다. 05:50:23 –

+0

무슨 뺄셈을하고 있니? 어떤 간격? STRING 함수를 사용하여 위치 2에서 오른쪽으로 문자를 가져 오도록 제안했습니다. 여기 다시 ... 그냥 시도해보십시오 .. SUBSTRING ('0 05:50:23', 2, 8) –

답변

3

두 개의 DATETIME YEAR TO SECOND 값의 차이는 기본적으로 INTERVAL DAY(n) TO SECOND 값이며, 숫자 0은 0시 (5 시간 등)가 시간의 차이에 있음을 알려줍니다. 당신이 그것을 요청해야하므로 오히려, INTERVAL HOUR(9) TO SECOND 결과를 줄 것으로 보인다 :

SELECT CAST(DBINFO('utc_to_datetime', logout) - 
      DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND) 
    FROM AnonymousTableWithColsLoginAndLogout 

테스트 :

CREATE TABLE AnonymousTableWithColsLoginAndLogout 
(
    login INTEGER NOT NULL, 
    logout INTEGER NOT NULL 
); 
INSERT INTO AnonymousTableWithColsLoginAndLogout VALUES(1473961283, 1473961283 + (5 * 60 + 50) * 60 + 23); 
SELECT CAST(DBINFO('utc_to_datetime', logout) - 
      DBINFO('utc_to_datetime', login) AS INTERVAL HOUR(9) TO SECOND) 
     FROM AnonymousTableWithColsLoginAndLogout 
; 

결과 :

5:50:23 

키가를 알고있다 차이에서 반환 된 데이터 형식 및 원하는 형식으로 캐스팅하는 방법을 알고 있어야합니다.

3 일, 5 시간, 50 분, 23 초 차이가있을 경우 결과는 77:50:23으로 표시됩니다.

덧붙여, 당신은 서면으로 DBINFO를 사용하여 피할 수 :

SELECT CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND) 
    From AnonymousTableWithColsLoginAndLogout; 

이 같은 대답을 생산하고 있습니다. HH : MM : SS


이 형식을 가질 수있는 방법이 있나요. 5 번째 숫자 앞에 0을 더하는 방법이 있나요?

잘 모르겠지만. 한 가지 문제는 '어떤 언어로 결과를 수집합니까?'입니다. 또는 'INTERVAL DAY (9)에서 SECOND로 어떻게 변환합니까'? 옵션에 영향을 줄 수 있습니다. SQLCMD - DB-Access 작업 - 조금 비슷하지만 더 나은 프로그램을 사용했습니다. C 또는 Java 또는 C# 또는 ...이 아닌 비슷한 환경에서 수행해야하는 경우 ghastligrams를 작성하여 문자열에 하나의 숫자가 있는지 확인하고 그렇지 않은 경우 0을 추가 할 수 있습니다.트릭도있다 : 이전 샘플 데이터에

SELECT EXTEND(DATETIME(2000-01-01 00:00:00) YEAR TO SECOND + 
     CAST((logout - login) UNITS SECOND AS INTERVAL HOUR(9) TO SECOND), HOUR TO SECOND) 
    From AnonymousTableWithColsLoginAndLogout; 

는, 그 원하는 결과를 생성합니다

05:50:23 

문자는 임의 날짜 시간에 지정된 날짜; 열쇠는 '자정'을 사용하는 것입니다. 결과는 이제 INTERVAL HOUR (9) TO SECOND 또는 DOMETIME HOUR SECOND가 아닌 DATETIME HOUR SECURD (두 번째 시간)로 바뀝니다. 즉, 24 시간 이상의 간격을두면 24 시간 모듈 식 응답을 생성하므로 데이터를 올바르게 나타내지 못합니다. 추가 작업은 성공하지만 추가 일에 대한 정보는 폐기됩니다. 24 시간 이내에는 괜찮을 것입니다.

간격을 포맷 할 때 TO_CHAR() 함수가 충분한 포맷 컨트롤을 제공하는지 확인해야 할 수도 있습니다. 실제로 간격 유형을 허용하는지 여부와 지정된 경우 수행 할 사항을 확인해야합니다.

+0

고맙습니다 만,이 포맷을 사용하는 방법이 있습니다 : HH : MM : SS, 제 말은 숫자 5 이전에 0을 더했다고 예를 들어 보셨습니까? –