2010-11-30 4 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 для других способов форматирования.


редактировать:

Oops! Выглядел тег 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') 

кроме этого возвращает день недели в качестве значения от 0 до 6. Возможно, что это достаточно хорошо?

+1

привет, я запустил запрос и получил: ошибка SQL: нет такой функции : date_format – brux 2010-11-30 22:43:15

+0

smog ли этот код быть adpated для того чтобы возвратить «mon» вместо «1» etc? : D – brux 2010-12-01 00:42:56

0

Здесь предложение с участием меньше, чем печатать CASE ... WHEN блока. Здесь же делается извлечения подстроки:

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

Он производит только фиксированные сокращения длины вместо полных названий дней недели, хотя. (Но иногда этого достаточно.)

Смежные вопросы