2010-11-30 28 views
7

Diğerleri arasında servdate numaralı bir sütuna sahip bir tablom var.Biçim tarihi haftanın günü olarak

I (Haftada Pazartesi başlar) geçtiğimiz hafta içinde bana tüm işleri almak için aşağıdaki sorguyu kullanın:

SELECT * FROM tb1 WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

sorgu tam olarak aynı çalışmak isteyen ancak bunun yerine servdate alanları dönmek için Haftanın karşılık gelen günü olarak. Örneğin, "2010-11-28" yerine "pazartesi".

Bu mümkün mü?

+1

wallyk'in fikri güzel ama basitlik için "0" "1" yerine – brux

cevap

18

Wallyk'in önerdiği gibi yardımcı bir tablo kullanabilirsiniz; İşte CASE ... WHEN bloktan daha az yazar kapsayan bir öneri

select _id, busnum, 
    case cast (strftime('%w', servdate) as integer) 
    when 0 then 'Sunday' 
    when 1 then 'Monday' 
    when 2 then 'Tuesday' 
    when 3 then 'Wednesday' 
    when 4 then 'Thursday' 
    when 5 then 'Friday' 
    else 'Saturday' end as servdayofweek 
from tb1 
where ... 
+0

Güzel ek. Dokümanlarda desteklenemedim, ancak Firefox'ta denedim ve gayet iyi çalışıyor: 'SELECT visit_date, case cast (strftime ('% w', visit_date/1000000) tamsayı olarak] 0 'güneş' zaman 1 sonra 'mon' iken 2 sonra 'tue' 3 sonra 'wed' sonra 4 sonra 'thu' 5 sonra 'fri' 6 sonra 'sat' else '???' son ziyaret tarihi: http://www.sqlite.org/lang_expr.html – wallyk

+0

teşekkürler bu çalışma – brux

+1

haftanın. Tüm hafta boyunca sonuç almak için, strftime ('% w', servdate) tarafından bir grup - 'grubu eklemem gerekiyor. –

-1
SELECT _id, busnum, date_format(servdate, '%a') as servdayofweek 
FROM tb1 
WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

% a, haftanın kısaltılmış günüdür. Biçimlendirmenin başka yolları için documentation'a bakın.


düzenleme:

Hata! Sqlite etiketi gözden kaçan. Yukarıdaki MySQL içindir. sqlite (documentation) için: Bu hariç

SELECT _id, busnum, strftime('%w', servdate) as servdayofweek 
FROM tb1 
WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

Belki yeterince iyi 6'ya kadar bir değere 0 olarak haftanın gününü döndürür?

+1

merhaba "güneş" "mon" yi tercih ederim, sorguyu çalıştırdım ve aldım: SQL hatası: böyle bir işlev yok : date_format – brux

+0

bu kod, "1" yerine "mon" döndürmek için eklenebilir mi? : D – brux

+0

Şimdiye kadar, bunu yapmanın doğrudan bir yolunu bulamadım. Başka bir tablo ekleyebilirseniz, o zaman önemsizdir. – wallyk

0

: veya bir case ifade kullanabilirsiniz. Burada, aynı alt dize ekstraksiyon yapılır:

select substr('SunMonTueWedThuFriSat', 1 + 3*strftime('%w', timestr), 3) as dow 
from ... 

Yine de yerine tam hafta içi isimleri sadece sabit uzunluk kısaltmalar üretir. (Ama bazen bu yeterlidir.)

İlgili konular