2014-06-17 6 views
1

시간 (서버에서)을 나타내는 테이블에 시간 열이 있습니다 (에포크 이후 밀리 초 단위로 레코드가 생성되었을 때).SQLite 에포크 시간 (밀리 초 단위)

그러나 strftime("%s")은 밀리 초 값을 생략하고 정수를 반환합니다.

strftime("%f")은 현재 분에 상대적인 두 번째 값과 분과 초의 두 번째 시간과 동기화되는 밀리 초 값을 반환합니다.

그래서 내가이 오히려 복잡한 문을 사용하여 내가 원하는 값을 얻을 수 있다는 것을 나타납니다

select CAST(strftime('%s','now') || '.' || substr(strftime('%f','now'),4,3) AS REAL) 

이 믿을 수 있습니까? 내 주요 관심사는 내가 strftime()을 두 번 호출해야한다는 사실입니다. 두 번째 값이 호출 사이에서 진행되어 예를 들어 4.999이 될 때가 3.999이되어야할까요? 아마 strftime("%f %s")의 결과를 저장하기 위해 임시 테이블을 만든 다음 두 개의 분리 된 선택 중 substr을 가져 오는 것이 상상할 수도 있지만, 이것이 더 복잡하고 확실하지는 않습니다. SQLite는 단지 strftime()을 호출하기에 충분합니다. 동일한 결과를 두 번 반환합니까?)이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

2

안전합니다. 이 쿼리는 40ms가 소요됩니다 내 컴퓨터에

WITH RECURSIVE cnt(x,y) AS (
    SELECT 1,1 
    UNION ALL 
    SELECT 
     x+1, 
     CAST(strftime('%s','now') || '.' || substr(strftime('%f','now'),4,3) AS REAL) 
    FROM cnt 
    LIMIT 10000) 
SELECT x,y FROM cnt; 

을하지만, 모든 시간 값은 동일합니다

The 'now' argument to date and time functions always returns 
exactly the same value for multiple invocations within the same 
sqlite3_step() call. 

documentation에서 이것은 다음과 같은 쿼리를 확인할 수 있습니다.

+1

[버전 3.8.1] (http://www.sqlite.org/releaselog/3_8_1.html) 이후에만. –