Русская документация для фриланесеров
Главная arrow Базы данных arrow Работа с датой в MySQL  
21.11.2008 г.
Главное меню
Главная
Поиск
PHP
.NET
Java
Ruby
C++
Delphi
Другие языки
Базы данных
Безопасность
Сети
ОС
Мобильные
Теория дизайна
WEB
Разное
Админцентр



люберцы металлические двери. ноутбуки купить. lcd tvs: Fotomag.com.ua. Peg Perego ARIA OH COMPLETO.. Дизайнер интерьеров. Home loan calculator - mortgage calculator.

Работа с датой в MySQL Печать E-mail
Автор Westry   
11.12.2007 г.
В лекции рассматриваются команды работы с датой и временем в MySql.

Создадим в текстовом редакторе файл employee_per.dat, который содержит оператор создания таблицы CREATE следующего вида:


CREATE TABLE employee_per (
e_id int unsigned not null primary key, -- идентификационный номер
address varchar(60), -- адрес
phone int, -- номер телефона
p_email varchar(60), -- адрес e-mail
birth_date DATE, -- дата рождения
sex ENUM('M', 'F'), -- пол
m_status ENUM('Y','N'), -- статус
s_name varchar(40), -- имя
children int); -- количество детей

и последовательность операторов INSERT, например, такого вида. Количество записей может быть произвольно.

INSERT INTO employee_per (e_id, address, phone, p_email, 
birth_date, sex, m_status, s_name, children) values (1,
'Арбат, 12', 7176167, ' Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ', '1972-03-16',
'M', 'Y', 'Анна Петрова', 2);

Затем загрузим этот файл, как мы делали раньше, в базу данных.

В системе Windows

1). Поместите файл в каталог c:\MySql\bin.

2). Выполните в приглашении DOS команду.

dosprompt> MySql employees <employee_per.dat

3). Запустите программу клиента MySql и проверьте, что таблица была создана, с помощью команды SHOW TABLES;.

В системе Linux

1). Перейдите в каталог, в котором находится файл.

2). В приглашении введите следующую команду:

$prompt> MySql employees <employee_per.dat -u your_username -p

3). Проверьте, что таблица была создана с помощью команды SHOW TABLES; в программе клиента MySql.

Данные таблицы можно вывести с помощью команды DESCRIBE.

MySql> DESCRIBE employee_per;

Результат запроса представлен на рис. 9.1.

MySql,субд,Просмотр данных таблицы

Рис. 9.1.  Просмотр данных таблицы

Обратите внимание, что столбец birth_date имеет тип столбца date (дата). Здесь также присутствует еще один новый тип столбца ENUM, который был рассмотрен в лекции 4.

e-id: идентификатор сотрудника, такой же как в таблице employee_data

address: адрес сотрудника

phone: номер телефона

p_email: личный адрес e-mail

birth_date: дата рождения

sex: Пол сотрудника, мужской (M) или Женский (F)

m_status: семейное положение, в браке (Y) или холост (N).

s_name: Имя супруга (NULL, если сотрудник холост)

children: Число детей (NULL, если детей нет)

Особенности типа данных Date

Даты в MySql всегда представлены с годом, за которым следует месяц и затем день месяца. Даты часто записывают в виде YYYY-MM-DD, где YYYY -- 4 цифры года, MM -- 2 цифры месяца и DD -- 2 цифры дня месяца.

Операции с датами

Тип столбца даты позволяет выполнять несколько операций, таких как сортировка, проверка условий с помощью операторов сравнения и т.д.

Использование операторов = и !=

select p_email, phone from employee_per where birth_date = '1969-12-31';

Результат запроса представлен на рис. 9.2.

MySql,субд,Поиск по дате рождения

Рис. 9.2.  Поиск по дате рождения

Примечание: MySql требует, чтобы даты были заключены в кавычки.

Использование операторов >= и <=

select e_id, birth_date from employee_per where birth_date >= '1970-01-01';

Результат запроса представлен на рис. 9.3.

MySql,субд,Поиск по дате рождения с использованием оператора >=

Рис. 9.3.  Поиск по дате рождения с использованием оператора >=

Определение диапазонов

select e_id, birth_date
from employee_per where
birth_date BETWEEN
'1969-01-01' AND '1974-01-01';

Результат запроса представлен на рис. 9.4.

MySql,субд,Поиск по дате рождения в определенном диапазоне

Рис. 9.4.  Поиск по дате рождения в определенном диапазоне

Тот же запрос можно представить без конструкции BETWEEN:

select e_id, birth_date
from employee_per where
birth_date >= '1969-01-01' AND birth_date <= '1974-01-01';

Результат запроса будет аналогичен рис. 9.4.

Задания

  1. Вывести идентификаторы и даты рождения всех сотрудников, которые родились до 1965 г.
  2. Вывести идентификаторы и даты рождения сотрудников, родившихся между 1970 и 1973 гг.

Возможные решения

  1. MySql> select e_id, birth_date
    -> from employee_per
    -> and birth_date <= '1964-12-31';
  2.     MySql> select e_id, birth_date
    -> from employee_per
    -> where birth_date >= '1970-01-01'
    -> and birth_date <= '1972-12-31';

Результат запроса представлен на рис. 9.5.

MySql,субд,Поиск по дате рождения в определенном диапазоне

Рис. 9.5.  Поиск по дате рождения в определенном диапазоне

Использование Date для сортировки данных

select e_id, birth_date
from employee_per
ORDER BY birth_date;

Результат запроса представлен на рис. 9.6.

MySql,субд,Поиск по дате рождения в определенном диапазоне

Рис. 9.6.  Поиск по дате рождения в определенном диапазоне

Выбор данных с помощью Date

Вот как можно выбрать сотрудников, которые родились в марте.

select e_id, birth_date
from employee_per
where MONTH(birth_date) = 3;

Результат запроса представлен на рис. 9.7.

MySql,субд,Поиск по месяцу

Рис. 9.7.  Поиск по месяцу

Можно также использовать вместо чисел названия месяцев.

select e_id, birth_date
from employee_per
where MONTHNAME(birth_date) = 'January';

Результат запроса представлен на рис. 9.8.

MySql,субд,Использование названия месяца в поиске

Рис. 9.8.  Использование названия месяца в поиске

Будьте внимательны при использовании названий месяцев, так как они различают регистр символов. Поэтому January будет работать, а JANUARY не будет!

Аналогично можно выбрать сотрудников, родившихся в определенный год или в определенный день.

select e_id, birth_date
from employee_per
where year(birth_date) = 1972;

Результат запроса представлен на рис. 9.9.

MySql,субд,Поиск по году рождения

Рис. 9.9.  Поиск по году рождения
select e_id, birth_date
from employee_per
where DAYOFMONTH(birth_date) = 20;

Результат запроса представлен на рис. 9.10.

MySql,субд,Поиск по дате рождения

Рис. 9.10.  Поиск по дате рождения

Текущие даты

Ранее мы видели, что текущую дату, месяц и год можно вывести с помощью аргумента CURRENT_DATE предложений DAYOFMONTH(), MONTH() и YEAR(), соответственно. То же самое можно использовать для выборки данных из таблиц.

select e_id, birth_date
from employee_per where
MONTH(birth_date) = MONTH(CURRENT_DATE);

Результат запроса представлен на рис. 9.11.

MySql,субд,Поиск по текущему месяцу

Рис. 9.11.  Поиск по текущему месяцу

Задания

  1. Вывести идентификаторы, даты рождения и адреса e-mail сотрудников, родившихся в апреле.
  2. Вывести идентификаторы, даты рождения и имена супругов сотрудников, родившихся в 1968 г., и отсортируйте записи на основе имен их супругов.
  3. Выведите идентификаторы сотрудников, родившихся в текущем месяце.
  4. Сколько в базе данных имеется уникальных годов рождения?
  5. Вывести список уникальных годов рождения и число сотрудников, родившихся в каждом таком году.
  6. Сколько сотрудников родились в каждом месяце? Выдача должна содержать названия месяцев (не номера), и записи должны быть упорядочены по убыванию по месяцам, начиная от наибольшего номера.

Возможные решения

  1.     MySql> select e_id, birth_date, p_email
    -> from employee_per
    -> where month(birth_date) = 4;

    Результат запроса представлен на рис. 9.12.

    MySql,субд,Сотрудники, родившиеся в апреле

    Рис. 9.12.  Сотрудники, родившиеся в апреле

    или

    MySql> select e_id, birth_date, p_email
    -> from employee_per
    -> where MONTHNAME(birth_date) = 'April';

    Результат аналогичен рис. 9.12.

  2.     MySql> select e_id, birth_date, s_name
    -> from employee_per where
    -> YEAR(birth_date) = 1968
    -> ORDER BY s_name;

    Результат запроса представлен на рис. 9.13.

    MySql,субд,Сотрудники 1968 года рождения, с сортировкой по именам

    Рис. 9.13.  Сотрудники 1968 года рождения, с сортировкой по именам

    Примечание: Значение NULL показано в самом верху. Более подробно значение NULL будет рассмотрено ниже.

  3.    MySql> select e_id from employee_per
    -> where month(birth_date) = month(current_date);

    Результат запроса представлен на рис. 9.14.

    MySql,субд,Сотрудники родившиеся в этом месяце

    Рис. 9.14.  Сотрудники родившиеся в этом месяце
  4.    MySql> select distinct year(birth_date) from employee_per;

    Результат запроса представлен на рис. 9.15.

    MySql,субд,Уникальные годы рождения

    Рис. 9.15.  Уникальные годы рождения
  5.    MySql> select year(birth_date) as Year,
    -> count(*) from employee_per
    -> GROUP BY Year;

    Результат запроса представлен на рис. 9.16.

    MySql,субд,Количество сотрудников, родившихся в каждом году

    Рис. 9.16.  Количество сотрудников, родившихся в каждом году
  6.    MySql> select MONTHNAME(birth_date) AS Month,
    -> count(*) AS Number
    -> from employee_per
    -> GROUP BY Month
    -> ORDER BY Number DESC;

    Результат запроса представлен на рис. 9.17.

    MySql,субд,Количество сотрудников, родившихся в каждом месяце

    Рис. 9.17.  Количество сотрудников, родившихся в каждом месяце

Тип столбца Null

В этой лекции мы уже встречались с типом NULL. Теперь рассмотрим его подробнее.

Тип столбца NULL является специальным значением. Чтобы вставить значение NULL, удалите просто имя столбца из оператора INSERT. Столбцы содержат NULL по умолчанию, если только не определены как NOT NULL. Значение null может использоваться для целочисленных, а также текстовых или двоичных данных.

NULL нельзя сравнивать с помощью арифметических операторов. Сравнение для NULL можно делать с помощью IS NULL или IS NOT NULL.

select e_id, children
from employee_per
where children IS NOT NULL;

Результат запроса представлен на рис. 9.18.

MySql,субд,Сотрудники, имеющие детей

Рис. 9.18.  Сотрудники, имеющие детей

Приведенная выше команда выводит идентификаторы и количество детей сотрудников, у которых есть дети.

Задания

  1. Найти и вывести идентификаторы и имена супругов всех сотрудников, которые состоят в браке.
  2. Изменить предыдущее задание так, чтобы вывод был отсортирован по именам супругов.
  3. Сколько имеется сотрудников каждого пола (мужчин и женщин)?
  4. Сколько сотрудников состоят в браке, и сколько холостых?
  5. Найдите общее число детей.
  6. Сделайте уникальные группы по количеству детей и определите число детей каждой группы. Отсортируйте вывод групп по убыванию по количеству детей.

Возможные решения

  1.     MySql> select e_id, s_name
    -> from employee_per
    -> where m_status = 'Y';

    или

    MySql> select e_id, s_name
    -> from employee_per
    -> where s_name IS NOT NULL;
  2. MySql> select e_id, s_name
    -> from employee_per
    -> where m_status = 'Y'
    -> ORDER BY s_name;


    MySql> select e_id, s_name
    -> from employee_per
    -> where s_name IS NOT NULL
    -> ORDER BY s_name;
  3. MySql> select sex, count(*)
    -> from employee_per
    -> GROUP BY sex;
  4. MySql> select m_status, count(*)
    -> from employee_per
    -> GROUP BY m_status;
  5. MySql> select sum(children) from employee_per;
  6. MySql> select children, count(*) AS
    -> число from employee_per
    -> GROUP BY children
    -> ORDER BY number DESC;
Источник - http://fububy.na.by/index.php?elif=mysql/mysql_9.html
 
« Пред.   След. »
Webdesign by Webmedie.dk Webdesign by Webmedie.dk