Bir SQLite veritabanına datetime değerini nasıl eklerim?


109

Bir SQLite veritabanına bir datetime değeri eklemeye çalışıyorum . Başarılı görünüyor ancak değeri almaya çalıştığımda bir hata oluşuyor:

<Veriler okunamıyor>

SQL ifadeleri şunlardır:

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

Yanıtlar:


153

İhtiyacınız olan format:

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

yani yyyy-AA-gg SS: dd: ss

Bununla birlikte, mümkünse, biçimlendirme ayrıntıları hakkında endişelenmenizi önlediği için parametreli bir sorgu kullanın.


Bu tür dizelerle tarihe göre nasıl sipariş verilir?
IgorGanapolsky

3
Tarihleri ​​bu şekilde biçimlendirdiğinizde, tarih sıralaması ve sözcük sıralaması aynı şekilde çalışır. Örneğin, hem dizeler hem de tarihler olarak '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01'. Ancak bununla kesinlikle ilgilenmenize gerek yok çünkü SQLite ORDER BY sizin için siparişle ilgilenecek.
itowlson

7
Sözcük sıralaması kullanarak tarihleri ​​farklı kesinlikte güvenilir bir şekilde karşılaştıramayacağınızı unutmayın, örneğin "SEÇ" 2007-01-02 10:00:00 '>' 2007-01-02 10:00 '; " 1 döndürür ancak "Tarih saat ('2007-01-02 10:00:00')> tarih saat ('2007-01-02 10:00');" 0 döndürür
Shane

@itowlson Çok dilli uygulamanız varken bu nasıl çalışacak?
batmaci


17

STRFTIME işlevini kullanarak ekleyebilmek için, sağladığınız tarih dizisinin biçimini değiştirmeniz gerekir. Nedeni, bir aylık kısaltma seçeneğinin olmaması:

%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
%%  % 

Alternatif, tarihi / saati önceden kabul edilmiş bir biçimde biçimlendirmektir:

  1. YYYY-AA-GG
  2. YYYY-AA-GG SS: DD
  3. YYYY-AA-GG SS: DD: SS
  4. YYYY-AA-GG SS: DD: SS.SSS
  5. YYYY-AA-GGTHH: MM
  6. YYYY-AA-GGTHH: MM: SS
  7. YYYY-AA-GGTHH: MM: SS.SSS
  8. SS: DD
  9. SS: DD: SS
  10. SS: DD: SS.SSS
  11. şimdi

Referans: SQLite Tarih ve Saat işlevleri


Tabloda listelenmemiş olsa da, dokümanlar ayrıca 'Z' veya '-0400'
coolaj86

10

CURRENT_TIMESTAMPİhtiyaç duyduğunuzda kullanın , OF yerine NOW()(MySQL'dir)


1
bu işe yaradı, bir şey yanlış. CURRENT_TIMESTAMP UTC olmadan tarih saatine döndürün, bu sorunu nasıl çözeceğinizi biliyor musunuz? Şimdiden teşekkürler!
Ulug'bek Ro'zimboyev

8

Bunu Oku : 1.2Date ve Zaman Veri Türü tarih ve saati depolamak için en iyi veri türü:

TEXT en iyi biçim: yyyy-MM-dd HH:mm:ss

Sonra bu sayfayı okuyun ; bu, içindeki tarih ve saat hakkında en iyi açıklamadır SQLite. Umarım bu sana yardımcı olur


5
Yalnızca bir grup bağlantıyla değil, yanıtınızı destekleyen bağlantılarla soruyu yanıtlamayı düşünmelisiniz
Gonzalo.

0

Bu en popüler ya da verimli bir yöntem olmayabilir, ama güçlü veri türlerini bırakmak eğilimindedir SQLite'ta hepsi temelde zaten dizeleri olarak atılıyor beri.

Daha önce (elbette SQLite C # ile kullanırken) SQLite'ye ve SQLite'den sanki DateTime nesneleriyle uğraşıyormuş gibi ekleme ve çıkarma işlemlerini işlemek için SQLite kitaplığının etrafına ince bir C # sarıcı yazdım.


Örneğin, o alana göre sıralamak isterseniz, tarihler için kesmez; bir dizi karşılaştırması
yaparsınız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.