Bagaimana cara memasukkan nilai datetime ke database SQLite?

109

Saya mencoba memasukkan nilai datetime ke dalam database SQLite . Tampaknya berhasil tetapi ketika saya mencoba mengambil nilai, ada kesalahan:

<Tidak dapat membaca data>

Pernyataan SQL tersebut adalah:

create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')
Brad
sumber

Jawaban:

153

Format yang Anda butuhkan adalah:

'2007-01-01 10:00:00'

yaitu tttt-BB-hh JJ: mm: dd

Namun, jika memungkinkan, gunakan kueri berparameter karena ini membebaskan Anda dari kekhawatiran tentang detail pemformatan.

itowlson
sumber
Bagaimana cara memesan berdasarkan tanggal dengan string seperti itu?
IgorGanapolsky
3
Jika Anda memformat tanggal seperti ini, pengurutan tanggal dan pengurutan leksikal berfungsi sama. Misalnya '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01' baik sebagai string maupun sebagai tanggal. Tetapi Anda tidak perlu benar-benar peduli tentang ini karena SQLite ORDER BY akan mengurus pemesanan untuk Anda.
itowlson
7
Perhatikan bahwa Anda tidak dapat membandingkan tanggal secara andal dengan presisi berbeda menggunakan pengurutan leksikal, misalnya "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" mengembalikan 1 tetapi "SELECT datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" mengembalikan 0.
Shane
@itowlson Bagaimana cara kerjanya bila Anda memiliki aplikasi multi bahasa?
batmaci
46

Cara menyimpan tanggal di SQLite adalah:

 yyyy-mm-dd hh:mm:ss.xxxxxx

SQLite juga memiliki beberapa fungsi tanggal dan waktu yang dapat Anda gunakan. Lihat SQL yang Dipahami Oleh SQLite, Fungsi Tanggal dan Waktu .

Tor Valamo
sumber
3
FYI, .xxxxxxdi sini di sintaks @ TorValamo = .SSS=% f dalam dokumentasi SQLite, yaitu detik pecahan.
Flak DiNenno
2
DateTime.parse ('2016-05-28 14:27:00 -0300'). Strftime ('% Y-% m-% d% H:% M:% S')
rodvlopes
17

Anda harus mengubah format string tanggal yang Anda masukkan agar dapat memasukkannya menggunakan fungsi STRFTIME. Alasannya, tidak ada opsi untuk singkatan bulan:

%d  day of month: 00
%f  fractional seconds: SS.SSS
%H  hour: 00-24
%j  day of year: 001-366
%J  Julian day number
%m  month: 01-12
%M  minute: 00-59
%s  seconds since 1970-01-01
%S  seconds: 00-59
%w  day of week 0-6 with sunday==0
%W  week of year: 00-53
%Y  year: 0000-9999
%%  % 

Alternatifnya adalah memformat tanggal / waktu ke dalam format yang sudah diterima:

  1. TTTT-BB-HH
  2. TTTT-BB-HH JJ: MM
  3. TTTT-BB-HH JJ: MM: SS
  4. TTTT-BB-HH JJ: MM: SS.SSS
  5. YYYY-MM-DDTHJ: MM
  6. TTTT-BB-HHTJJ: MM: SS
  7. YYYY-MM-DDTHJ: MM: SS.SSS
  8. HH: MM
  9. HH: MM: SS
  10. HH: MM: SS.SSS
  11. sekarang

Referensi: Fungsi Tanggal & Waktu SQLite

OMG Ponies
sumber
Meskipun tidak tercantum dalam tabel, dokumen juga menyatakan bahwa Anda dapat menambahkan 'Z' atau offset seperti '-0400'
coolaj86
10

Gunakan CURRENT_TIMESTAMPsaat Anda membutuhkannya, bukan OF NOW()(yaitu MySQL)

pembekuan_
sumber
1
ini berhasil, satu hal yang salah. CURRENT_TIMESTAMP mengembalikan tanggal waktu tanpa UTC, apakah Anda tahu cara mengatasi masalah ini. Terima kasih sebelumnya!
Ulug'bek Ro'zimboyev
8

Baca Ini : DateJenis data 1.2 dan Time Datatype terbaik untuk menyimpan tanggal dan waktu adalah:

TEXT format terbaik adalah: yyyy-MM-dd HH:mm:ss

Kemudian baca halaman ini ; ini adalah penjelasan terbaik tentang tanggal dan waktu di SQLite. Saya harap ini membantu Anda

Ali Amanzadegan
sumber
5
Anda harus mempertimbangkan untuk menjawab pertanyaan, dengan tautan yang mendukung jawaban Anda, bukan hanya sekumpulan tautan
Gonzalo
0

Ini mungkin bukan metode yang paling populer atau efisien, tetapi saya cenderung melupakan tipe data yang kuat di SQLite karena semuanya pada dasarnya dibuang sebagai string.

Saya telah menulis pembungkus C # tipis di sekitar pustaka SQLite sebelumnya (saat menggunakan SQLite dengan C #, tentu saja) untuk menangani penyisipan dan ekstraksi ke dan dari SQLite seolah-olah saya berurusan dengan objek DateTime.

Kacau
sumber
Tidak memotongnya untuk tanggal jika misalnya Anda ingin mengurutkan berdasarkan bidang itu; Anda berakhir dengan perbandingan string ...
G__