[sqlite] SQLite에서 DATETIME 값은 어떻게 작동합니까?

Android 앱을 만들고 있는데 생성 기록의 날짜 / 시간을 저장해야합니다. 그러나 SQLite 문서에서는 “SQLite에는 날짜 및 / 또는 시간을 저장하기 위해 따로 설정된 스토리지 클래스가 없습니다”라고 말하며 “텍스트, REAL 또는 INTEGER 값으로 날짜와 시간을 저장할 수 있습니다”라고 말합니다.

한 유형을 다른 유형보다 사용하는 기술적 이유가 있습니까? 그리고 단일 열에 행에서 행까지 세 가지 형식 중 하나로 날짜를 저장할 수 있습니까?

나중에 날짜를 비교해야합니다. 예를 들어, 내 앱에서 A 날짜부터 B 날짜까지 생성 된 모든 레코드를 표시합니다. 실제 DATETIME 열이 없으면 비교가 어려울 수 있습니다.



답변

SQlite에는 특정 날짜 / 시간 유형이 없습니다. 당신은 사용할 수 있습니다 TEXT, REAL또는 INTEGER당신의 요구에 맞는 중, 유형.

DOCS에서 바로

SQLite에는 날짜 및 / 또는 시간을 저장하기 위해 따로 설정된 스토리지 클래스가 없습니다. 대신 SQLite의 기본 제공 날짜 및 시간 함수는 날짜와 시간을 TEXT, REAL 또는 INTEGER 값으로 저장할 수 있습니다.

  • ISO8601 문자열의 TEXT ( “YYYY-MM-DD HH : MM : SS.SSS”).
  • 율리우스 일 숫자로 REAL, proleptic 그레고리력 달력에 따라 BC 4714 년 11 월 24 일 그리니치에서 정오 이후 일 수.
  • INTEGER as Unix Time, 1970-01-01 00:00:00 UTC 이후의 초 수입니다.

애플리케이션은 이러한 형식 중 하나로 날짜와 시간을 저장하고 내장 된 날짜 및 시간 함수를 사용하여 형식간에 자유롭게 변환하도록 선택할 수 있습니다.

SQLite 내장 날짜 및 시간 함수는 여기에서 찾을 수 있습니다 .


답변

SQLite에는 날짜 및 / 또는 시간을 저장하기 위해 따로 설정된 스토리지 클래스가 없습니다. 대신 SQLite의 기본 제공 날짜 및 시간 함수는 날짜와 시간을 TEXT, REAL 또는 INTEGER 값으로 저장할 수 있습니다.

ISO8601 문자열의 TEXT ( “YYYY-MM-DD HH : MM : SS.SSS”). 율리우스 일 숫자로 REAL, proleptic 그레고리력 달력에 따라 BC 4714 년 11 월 24 일 그리니치에서 정오 이후 일 수. INTEGER as Unix Time, 1970-01-01 00:00:00 UTC 이후의 초 수입니다. 애플리케이션은 이러한 형식 중 하나로 날짜와 시간을 저장하고 내장 된 날짜 및 시간 함수를 사용하여 형식간에 자유롭게 변환하도록 선택할 수 있습니다.

즉, INTEGER를 사용 하고 Unix epoch (1970-01-01 00:00:00 UTC) 이후 초를 저장합니다.


답변

SQLite의 강력한 기능 중 하나는 스토리지 유형을 선택할 수 있다는 것입니다. 세 가지 가능성 각각의 장점 / 단점 :

  • ISO8601 문자열

    • 문자열 비교는 유효한 결과를 제공합니다.
    • 소수점 세 자리까지 분수 초를 저장합니다.
    • 더 많은 저장 공간 필요
    • 데이터베이스 브라우저를 사용할 때 그 값을 직접 볼 수 있습니다.
    • 다른 용도로 구문 분석 필요
    • “기본 current_timestamp”열 수정자는이 형식을 사용하여 저장합니다.
  • 실수

    • 초에 대한 높은 정밀도
    • 가장 긴 시간 범위
  • 정수

    • 가장 낮은 저장 공간
    • 빠른 작업
    • 작은 시간 범위
    • 가능한 2038 년 문제

다른 유형을 비교하거나 외부 응용 프로그램으로 내 보내야하는 경우 필요에 따라 SQLite의 자체 날짜 시간 변환 함수 를 자유롭게 사용할 수 있습니다.


답변

거의 모든 날짜와 시간 문제에 대해 매우 간단하게 단순화하는 것을 선호합니다. 정수에 저장된 초까지.

정수는 데이터베이스, 플랫 파일 등에서 항상 정수로 지원됩니다. 약간의 수학을 수행하고 다른 유형으로 캐스트하고 원하는대로 날짜 형식을 지정할 수 있습니다.

이렇게하면 [여기에 현재 즐겨 찾기 데이터베이스 삽입]이 우연히 오늘 선택한 날짜 형식을 사용하지 않은 [향후 즐겨 찾기 데이터베이스]로 대체 될 때 걱정할 필요가 없습니다.

약간의 수학 오버 헤드 (예 : 방법-2 초 소요, 필요한 경우 요점 게시) 일 뿐이며 나중에 날짜 / 시간과 관련된 많은 작업을 단순화합니다.


답변

유형의 필드에 저장하십시오 long. 참조 Date.getTime()new Date(long)


답변