6

이것은 실제 질문이 아니기 때문에 닫힌 another question과 매우 유사합니다. 다시 열어 볼 수 있도록 편집하려고 시도했지만 새로운 질문을하는 것이 나을 것입니다.datetime을 SQLite에 저장하는 방법

나는 android에서 개발 중이며 sqlite 데이터베이스에 datetime 값을 저장하여 알림을 생성하는 반복 이벤트를 추적해야합니다. 또한 시간 범위에 따라 데이터베이스를 쿼리 할 수 ​​있어야합니다. "(YYYY-MM-DD HH를 ISO8601 문자열로

TEXT :

SQLite documentation는 특정 날짜 형식을 지원하지만 날짜가 TEXT, REAL, 또는 INTEGER 유형을 사용하여 표현 될 수 있다는 것을하지 않는 상태 MM를 : SS.SSS ").

REAL 주전 4714 년 11 월 24 일 그리니치 (Netwich)에서 정오 이후 줄리안 일 수, 일 수. 프리 글리 프릭 그레고리력에 따르면

INTEGER는 1970-01-01 00:00:00 UTC 이후의 초 단위 시간 (Unix Time)입니다. 계산을 수행해야하는 경우

  • TEXT은 (아무 변환 필요) 나중에 직접 표시 할 능력을 가진 데이터베이스의 가독성에 유용하지만, 비용이 많이 드는 각각의

장점은 처음이 될 것 같다 그들. 시간대에서 발생할 수있는 오류를 소개합니다.

  • REAL 1970 년 이전의 날짜에 유용합니다. 계산 또는 날짜 비교에 유용합니다. 하루 중 시간을 나타내지는 않습니다.
  • INTEGER는 계산 또는 datetime 비교에 유용하며 널리 지원되는 표준이므로 매우 우수한 호환성을 제공합니다.
  • 소리가 맞습니까? datetimes에 INTEGER를 사용하면 TEXT를 사용할 때보 다 시간 범위를 눈에 띄게 빠르게 쿼리 할 수 ​​있습니까? 내가 고려하지 않은 다른 것?

    내 경우를 감안할 때 이러한 솔루션 중 가장 적합한 것은 무엇입니까?

    +1

    어떤 종류의 데이터 (수백, 수천, 수백만 레코드)를 기대합니까? SQLite는 작은 DB를위한 것이므로 몇 백 개가 넘는 레코드는 과도합니다. datetimes를 저장하기 위해 텍스트를 사용할 것을 제안합니다. 필요할 때만 (수천 개의 레코드에서 datetime을 계산해야 함) datetime의 기본 데이터를 실제 또는 int로 변경해야합니다. –

    +0

    최대 레코드 수는 수백 개에 불과합니다. 나는 성능이 문제가되지 않는다는 것을 의미한다고 생각하지만, 텍스트는 비교를 복잡하게 만드는 것처럼 보입니다. 일광 절약제가 가져올 수있는 오류에 대해 걱정하고 있습니다. – Matthew

    답변

    4

    TEXT은 ISO 포맷은 일반적으로 디스플레이에 사용되지

    직접 후 (필요한 어떠한 변형)도 표시되지 단계; 당신도 이것을 변형시켜야합니다. (이 형식은 디버깅에 더 유용하다.)

    비용 계산이 그 데이터베이스를

    수행해야하는 경우 병목 현상은 일반적으로 I/O이다. 날짜 값의 실제 형식이 눈에 띄는 차이를 만드는 쿼리를 볼 수 있을지 의심 스럽습니다.

    표준 시간대에서 발생할 수있는 오류를 소개합니다.

    TEXT 형식에는 표준 시간대 지정자가 없지만 다른 형식은 없습니다. 모든 DB 값이 UTC로되어 있다고해도 차이점은 없습니다.

    날짜에 유용 REAL 전에 1970

    모든 형식은 0에서 9999 사이의 모든 년 지원 (정수는 음수가 될 수 있습니다.)

    일의 시간을 나타내지 않는, 오직 일 .

    시간은 분수로 표시됩니다.

    정수 ... 널리 지원되는 표준이므로 매우 우수한 호환성.

    그러나 Java는 초가 아니라 밀리 초를 사용합니다.

    내가 고려하지 않은 사항이 있습니까?

    대부분의 built-in date functions의 기본 출력 형식은 TEXT입니다.


    내 사용 사례를 감안할 때, 이러한 솔루션 중 어느 것이 좋을까요?

    저는 TEXT라고 말하고 싶지만 그다지 차이가 ​​없을 것이라고 생각합니다.

    0

    시간 만 나타내는 것이 아니라 며칠입니다.

    이것이 바로 REAL의 분수 부분입니다.

    datetimes에 INTEGER를 사용하면 TEXT를 사용할 때보 다 시간 범위를 크게 빠르게 쿼리 할 수 ​​있습니까?

    가능성이 큽니다. 문자열 비교가 정수 비교보다 빠를 수있는 시나리오를 생각할 수 없습니다. 특히 쿼리의 인덱싱 된 열의 경우 더욱 그렇습니다.

    내가 고려하지 않은 사항이 있습니까?

    the effects of gamma rays on man-in-the-moon marigolds을 고려했는지는 알 수 없지만 여기서는 중요하지 않습니다.:-)

    내 경우를 감안할 때 어떤 솔루션이 가장 좋을까요?

    INTEGER, IMHO.

    1

    여기에 대한 대답은 주로 의견이지만, 나는 당신이라면 INTEGER 유형을 사용하고 유닉스 타임 스탬프를 저장할 것입니다. 형식 변환/구문 분석에 덜 의존적으로 보이며 보편적으로 지원되는 표준입니다. 능력 데이터베이스 가독성 유용

    0

    UTC 날짜 시간을 SQLite에 8 바이트 64 비트 정수로 저장합니다. 인덱스 데이터베이스와 밀리의 sence 1970

    long time= System.currentTimeMillis(); 
    

    당신은에 의해 및 날짜 데이터를 읽는 사이의 순서에 대해 10K 행에 대한 뛰어난 응답을해야합니다.

    모든 UTC 시간이 포함 된 데이터베이스가 월드 와이드로 작동하므로 표준 시간대 조작을 뷰 계층에 그대로 둡니다.

    고대의 텍스트를 날짜로 저장하지 말고 현대 응용 프로그램에 아무 것도 없습니다.

    이벤트가 발생했을 때 현대 앱이 고려하므로 날짜를 저장하지 않아야합니다. 8 바이트의 datetimes를 저장할 수 있습니다. 그러나 iso 날짜를 정수로 1999-12-31 19991231로 넣고 sqllite에 4 바이트 정수를 저장할 수 있습니다.

    관련 문제