2017-01-26 10 views
1

mysql에서 마이크로 초를 밀리 초로 반올림하는 가장 좋은 방법은 무엇입니까? 우리는 반올림 어떻게 날짜 시간 (6) 항목 예를 들면마이크로 초에서 밀리 초 반올림 MySQL

,

2016년 12월 1일 12 : 30 : 30 : 01.122456 12 2016년 12월 1일에 01.122

2016년 12월 1일 12 : 30 : 30 : 01.122501 12 2016년 12월 1일에 01.123

감사

답변

1

이 쿼리를보십시오 :

SELECT FROM_UNIXTIME(TO_SECONDS(dt) - 
        TO_SECONDS('1970-01-01 00:00:00') + 
        (ROUND(MICROSECOND(dt)/1000, 0)/1000)) AS new_dt 
FROM yourTable 

여기서 dtdatetime입니다. 설명을 위해 위의 쿼리는 예를 들어 2016-12-01 12:30:01.122456을 사용하여 분석 할 것입니다.

MICROSECOND(dt) = 122456 
ROUND(MICROSECOND(dt)/1000, 0) = 122 

(ROUND(MICROSECOND(dt)/1000, 0)/1000)) = 0.122 

그래서 0.122 라운딩 후 마이크로 범위에있는 정밀도를 포함하지 않는 datetime에 분수 (초)입니다.

TO_SECONDS(dt) = # seconds EXCLUDING the fractional part 

마지막으로, 우리는 0 년 이후 dt에 (초)을 타고 시대의 시작으로 올해 0 초를 뺍니다. 그로 인해 신기원이 시작된 이래로 초당 숫자는 dt입니다. 그런 다음 분수 부분을 제외한 초 수를 0.122에 추가하여 원하는 새 시간 (초)을 얻습니다. datetime. 마지막으로 을 사용하여이 초 수를 진실한 datetime으로 변환합니다.

+0

FROM_UNIXTIME 결과가 null 값으로 작동하지 않는 것 같습니다. TO_SECONDS 작동하지만 FROM_UNIXTIME NULL로 설정합니다. 어떤 아이디어? 감사합니다 –

+0

SELECT FROM_UNIXTIME (TO_SECONDS ('2015-12-11 12 : 31 : 04.080000') + (ROUND (MICROSECOND ('2015-12-11 12 : 31 : 04.080000')/1000, 0)/1000)) AS new_dt는 null 값을 나타내지 만 TO_SECONDS ('2015-12-11 12 : 31 : 04.080000') + (ROUND (MICROSECOND ('2015-12-11 12 : 31 : 04.080000')/1000) 0)/1000)은 값을 반환합니다. –

+0

'MICROSECOND ('2015-12-11 12 : 31 : 04.080000')'은 무엇을 제공합니까? –