Формат даты как день недели - PullRequest
8 голосов
/ 01 декабря 2010

У меня есть таблица, в которой, среди прочего, есть столбец даты servdate.

. Я использую следующий запрос, чтобы получить все вакансии за последнюю неделю (неделя начинается с понедельника):

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

Я хочу, чтобы запрос работал точно так же, но вместо этого возвращал поля servdate в качестве соответствующего дня недели.Например, «понедельник» вместо «2010-11-28».

Возможно ли это?

Ответы [ 3 ]

21 голосов
/ 01 декабря 2010

Вы можете использовать вспомогательную таблицу, как предложил 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 ...
2 голосов
/ 01 сентября 2017

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

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

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

0 голосов
/ 01 декабря 2010
SELECT _id, busnum, date_format(servdate, '%a') as servdayofweek
FROM tb1
WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now')

% a - сокращенный день недели.Смотрите документацию для других способов форматирования.


edit:

Упс!Пропустил тег sqlite.Выше для MySQL.Для sqlite ( документация ):

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

за исключением того, что возвращает день недели в виде значений от 0 до 6. Может быть, этого достаточно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...