Поиски вчерашнего дня, или как отнять день на mysql и bash
При написании shell-скриптов понадобилось производить манипуляции с датой:
— находить сегодняшнюю дату;
— находить вчерашнюю дату;
— вычитать один день из произвольной даты;
Немного о скрипте. В каталоге находятся дампы. В название каждого дампа включена дата создания, а сам дамп представляет собой данные за предыдущие сутки.
Задача: провести вычисления и записать в базу данных с правильной датой.
Условимся, что перед началом обработки дампа, мы получаем дату (из названия файла) и сохраняем её в переменную $date
.
MySQL
В MySQL есть множество функций для работы с датой и временем. Но нас интересуют только две:
CURDATE() – возвращает текущую дату, например: 2013-04-25
SUBDATE(дата, число_суток) – отнимает указанное число_суток от введённой даты.
С их помощью можно найти дату вчерашнего дня:
SUBDATE(CURDATE(), 1) |
2013-04-24
или получить вчерашний день относительно произвольной даты:
SUBDATE('2013-03-01', 1) |
2013-02-28
Всё вместе в shell-скрипте, это выглядит так:
#!/bin/bash date="2013-03-01" echo $date mysql -uroot -ppass test_db -e "SELECT SUBDATE('$date', 1);" |
На экране будет:
2013-03-01
2013-02-28
Bash
Для выполнения аналогичных манипуляций нам необходима функция date и хитрый набор параметров.
Текущая дата (формат DATE
для MySQL):
date +%Y-%m-%d |
2013-04-25
Как вариант, вместо %Y-%m-%d
можно использовать %F
:
date +%F |
2013-04-25
Вчера:
date --date="yesterday" +%F |
2013-04-24
Отнять один день от произвольной даты:
#!/bin/bash date="2013-03-01" echo $date ydate=`date --date="${date} 1 days ago" +"%F"` echo $ydate |
На экране будет:
2013-03-01
2013-02-28