Поиски вчерашнего дня, или как отнять день на mysql и bash

25th Апрель 2013 | Категории: Linux, MySQL | Метки: ,

При написании 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

Subscribe without commenting


Пока комментариев нет.