2015-04-07 2 views
1

У меня есть таблица с столбцом timestamp, и вы хотите выполнить SELECT, который возвращает этот столбец дружественным образом, который выражает, сколько дней назад это произошло, например «Сегодня», «Вчера», «2 дня назад», «3 дня назад» ...MSACCESS: SELECT «Сколько дней назад» {может вернуться: сегодня, вчера, 2 дня назад, ...}, field1, field2, fieldN FROM mytable

Я не могу обрабатывать данные по месту назначения, поэтому мой запрос должен вернуть окончательную строку.

Я уже использую DateDiff ("d", timestamp, Date()), чтобы определить целое число, которое представляет, но мне нужно преобразовать в соответствующую строку.

Я уже успел построить вспомогательную таблицу, такую ​​как [intDays (PK), strDays] и внутреннее соединение, но таким образом мне нужно предварительно заполнить весь диапазон значений. Я ищу более универсальное решение, которое следует условной логике для вывода правильной строки, например: (псевдо-код)

If DateDifference = 0 Then return "Today" 
If DateDifference = 1 Then return "Yesterday" 
return DateDifference & " days ago" 

ответ

2

Вы можете использовать iif():

select iif(DateDiff("d", timestamp, Date()) = 0, "Today", 
      iif(DateDiff("d", timestamp, Date()) = 1, "Yesterday", 
       DateDiff("d", timestamp, Date()) & " days ago" 
      ) 
     ) 

Примечания: последний может потребоваться cstr(DateDiff("d", timestamp, Date())) & " days ago". Я не уверен, что MS Access автоматически выполняет преобразование или генерирует ошибку, если один из аргументов не является строкой.

Этот тип логики часто выполняется на уровне приложения.

+0

Привет, Гордон, ваше решение спасло мой день. Я очень благодарен. – Filipe

+0

Кроме того, MS Access не жаловался на объединение целых чисел со строкой. – Filipe

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