我有一個表格,其中包含日期列servdate
。格式日期爲星期幾
我用下面的查詢來獲取我所有的工作從過去的一週內(每週從星期一開始):
SELECT * FROM tb1 WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now')
我希望查詢工作完全一樣,而是返回servdate
領域作爲一週中的相應日子。例如,「星期一」,而不是「2010-11-28」。
這可能嗎?
我有一個表格,其中包含日期列servdate
。格式日期爲星期幾
我用下面的查詢來獲取我所有的工作從過去的一週內(每週從星期一開始):
SELECT * FROM tb1 WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now')
我希望查詢工作完全一樣,而是返回servdate
領域作爲一週中的相應日子。例如,「星期一」,而不是「2010-11-28」。
這可能嗎?
您可以使用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 ...
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也許這是夠好?
這裏涉及比CASE ... WHEN
塊打字少了建議。這裏,同樣是通過提取子串完成:
select substr('SunMonTueWedThuFriSat', 1 + 3*strftime('%w', timestr), 3) as dow
from ...
它只能產生固定長度的縮寫,而不是完整的星期幾的名字,雖然。 (但有時這就夠了)
wallyk的想法很好,但爲了簡單起見,我更喜歡「太陽」「mon」而不是「0」「1」 – brux 2010-12-01 00:43:43