2010-11-30 159 views
7

我有一個表格,其中包含日期列servdate格式日期爲星期幾

我用下面的查詢來獲取我所有的工作從過去的一週內(每週從星期一開始):

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

我希望查詢工作完全一樣,而是返回servdate領域作爲一週中的相應日子。例如,「星期一」,而不是「2010-11-28」。

這可能嗎?

+1

wallyk的想法很好,但爲了簡單起見,我更喜歡「太陽」「mon」而不是「0」「1」 – brux 2010-12-01 00:43:43

回答

18

您可以使用wallyk建議的輔助表;或者您可以使用一個case表達:

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 ... 
-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是一週的縮寫日期。請參閱documentation以獲取格式化的其他方法。


編輯:

糟糕!忽略了sqlite標籤。以上是針對MySQL的。 SQLite的(documentation):

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

除了這種通過6.返回星期幾作爲一個值0也許這是夠好?

+1

你好,我跑了查詢並得到:SQL錯誤:沒有這樣的函數:date_format – brux 2010-11-30 22:43:15

+0

這個代碼可以寫成返回「mon」而不是「1」等嗎? :D – brux 2010-12-01 00:42:56

0

這裏涉及比CASE ... WHEN塊打字少了建議。這裏,同樣是通過提取子串完成:

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

它只能產生固定長度的縮寫,而不是完整的星期幾的名字,雖然。 (但有時這就夠了)