Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для студентов РУБД / теория по SQL 1 часть.doc
Скачиваний:
47
Добавлен:
21.03.2016
Размер:
631.3 Кб
Скачать

Функции условий

IFNULL(x,y)— если x не NULL, тогда выдаёт x, иначе — y.

NULLIF(x,y)— если x и y равны, выдаёт NULL, если не равны — x.

IF(x,y,z)— если x = true (вернее, если x не равен 0 и не NULL), выдаёт y, если нет — z.

К примеру, в форуме хранится информация о пользователях и есть возможность не показывать другим пользователям свой Email. Делается поле show_email, в котором лежит 0, если пользователь не хочет показывать адрес, и 1, если разрешает.

SELECT ..., IF (show_email,CONCAT('<a href=mailto:',email,'>написать письмо</a>'),'адрес не указан') AS email, ...

Математические функции

MOD(N,M)или "%" — остаток от деления N на M.

FLOOR и CEILING— округление до целого вниз и вверх.

ROUND— округление до целого или до определенной десятичной дроби.

LEAST (X,Y,...) и GREATEST(X,Y,...)— минимальное и максимальное числа из указанных.

Не упоминаю стандартные математические функции взятия модуля, знака, работы с углами.

Строковые функции

CONV(N,система_из,система_в)— конвертация числа из одной системы исчисления в другую:select CONV("ff",16,10); => 255. Кстати, конвертировать можно не только в стандартных системах (2,8,10,16), но и в любых других от 2 до 36 — насколько хватает букв латинского алфавита.

CONCAT(X,Y,...)— объединение строк и чисел в одну строку (пример приведён выше).

CONCAT_WS(разделитель,X,Y,...)— аналог функцииimplode.

LENGTH(строка)strlen.

LOCATE(подстрока, строка)strpos.

SUBSTRING(строка, отступ, длина)substr.

TRIM()— удаление лишних символов из начала и конца строки. В отличие от функции phptrimпозволяет не только пробелы, а любые символы и даже комбинации символов.

REPLACE (строка, X, Y)— заменяет в строке X на Y (не перепутайте порядок с порядком параметров в str_replace).

Дата и время

Функций много, отмечу только некоторые самые важные: неправда, что MySQL считает дни недели только с воскресенья, как принято в Америке. Нужно использовать не функцию DAYOFWEEK, а WEEKDAY, тогда понедельнику будет соответствовать номер 0, вторнику — 1, воскресенью — 6.

Для сложного форматирования даты (например, для вывода даты в виде 18.08.01), есть функции DATE_FORMAT (для даты и времени) и TIME_FORMAT (только для времени). Работа с этими функциями удобнее, чем использование своих собственных (потому что это средство стандартное и универсальное, чего в самопальном приспособлении добиться очень сложно), а так же быстрее (используются встроенные функции mysql-сервера, которые уже сидят в памяти, вместо компиляции при каждом запуске скрипта собственного кода).

Юниксовский timestamp MySQL тоже поддерживает — переводы в него и из него через функции UNIX_TIMESTAMP и FROM_UNIXTIME:

UNIX_TIMESTAMP([дата-время])— выдаёт дату в юниксовом формате (если аргумент пропущен — текущую дату).

FROM_UNIXTIME(дата [, формат])— выдаёт дату в обычном формате (во втором аргументе может быть указан формат по правилам как в DATE_FORMAT).

Кроме того, основные параметры даты — число, день недели и месяц (возможно и словом), год, квартал (!), неделя и многое другое доступно не только через общую функцию DATE_FORMAT, но и через отдельные специальные функции.