안녕하세요~
날짜 연산을 아래와 같이 하려고 하는데요...
아래 결과값이 정수값으로 나오거든요...
소수형태의 결과를 받아볼 순 없나요??
select ((SYSTIMESTAMP - TO_TIMESTAMP('2011-feb-20 07:55:49', 'YYYY-Mon-DD HH24:MI:SS')) /3600/24) k
안녕하세요~
날짜 연산을 아래와 같이 하려고 하는데요...
아래 결과값이 정수값으로 나오거든요...
소수형태의 결과를 받아볼 순 없나요??
select ((SYSTIMESTAMP - TO_TIMESTAMP('2011-feb-20 07:55:49', 'YYYY-Mon-DD HH24:MI:SS')) /3600/24) k
답변 감사합니다..
제가 최종적으로 저 쿼리에 Round함수를 사용하려고 하거든요..
select Round(((SYSTIMESTAMP - TO_TIMESTAMP('2011-feb-22 20:22:40', 'YYYY-Mon-DD HH24:MI:SS')) /3600/24.0),2) k
이런식으로 하려고 했는데..
괄호 안에 날짜계산 결과가 수치형값이 아니라서 그런지 Round가 적용되질 않네요... 혹시 방법없을까요??
답변중 조금 보완할 부분이 있어서 덧붙입니다.
정수 / 정수 결과는 정수이기 때문에 소수 형태의 결과를 얻기 위해서는 한쪽 타입이 float 또는 double이 되어야 합니다.
이때 중간 결과의 타입에 따라 결과가 달라질수 있습니다.
만약 SYSTIMESTAMP - TO_TIMESTAMP('2011-feb-20 07:55:49', 'YYYY-Mon-DD HH24:MI:SS') 의 결과가 100000 이라고 가정했을때 나누는 방법에 따라 다음과 같은 결과를 얻을수 있습니다.
select 100000 / 3600 / 24 --> 1
select 100000 / 3600 / 24.0 --> 1.125000000
select 100000 / 3600.0 / 24 --> 1.157407407
select cast(100000 as double) / 3600 / 24 --> 1.157407407407407e+00
아래쪽 두가지가 원하는 결과라고 생각됩니다. 마지막 두가지는 결과 타입이 float인지 double인지에 따라 달라진 것입니다.
원하는 타입으로 명확히 캐스팅해서 사용하는게 낫기 때문에 마지막 방법을 권장해 드리고 싶네요.
다음과 같이 하면 될 듯 싶습니다.
select ((SYSTIMESTAMP - TO_TIMESTAMP('2011-feb-20 07:55:49', 'YYYY-Mon-DD HH24:MI:SS')) /3600/24.0) k
마지막에 소수를 나눠주면 결과값도 소수로 나오게 됩니다.