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')

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.


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


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


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)


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


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.


Tidak memotongnya untuk tanggal jika misalnya Anda ingin mengurutkan berdasarkan bidang itu; Anda berakhir dengan perbandingan string ...
G__
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.