Наиболее часто используемые функции в SQL Server 2005/2008
Функции даты и времени в SQL Server
Коллеги, привет! Работа с датами — это классика. Чуть ли не в каждом проекте нужно что-то посчитать: «когда был последний вход», «сколько дней просрочки» или «собрать отчет за месяц». Давайте разберем функции, которые реально выручают. Без воды, только практика.
GETDATE()
Самая базовая штука — GETDATE(). Просто вызываешь, и она возвращает текущие дату и время с сервера. Никаких параметров, никакой магии.
Пример:
DECLARE @Date DATETIME
SET @Date = GETDATE()
PRINT @Date
Результат:
мар 13 2023 7:37PM
Время выполнения: 2023-03-13T19:37:55.6954185+03:00
DATEADD()
Надо прибавить или отнять дни, часы, минуты? Используй DATEADD(). Синтаксис простой: DATEADD(datepart, number, date).
Например, нужно узнать, какая дата будет через 5 дней от сегодня:
DECLARE @Date DATETIME = GETDATE()
PRINT @Date -- Текущая дата
SELECT DATEADD(day, 5, @Date) AS NewTime
Результат:
2023-03-18 19:42:03.813
DATEPART()
Когда нужно вытащить только год, месяц или час — DATEPART() твой выбор.
-- Получить только год
SELECT DATEPART(year, GETDATE()) AS 'Год'
-- Получить только месяц
SELECT DATEPART(month, GETDATE()) AS 'Месяц'
-- Получить только часы
SELECT DATEPART(hour, GETDATE()) AS 'Часы'
Результат:
Год
2023
Месяц
3
Часы
19
DATEDIFF()
DATEDIFF() — вещь, без которой никуда. Считает разницу между двумя датами. Синтаксис: DATEDIFF(datepart, startdate, enddate).
Допустим, нужно посмотреть, сколько дней осталось до дедлайна:
DECLARE @Date1 DATETIME = GETDATE()
DECLARE @Date2 DATETIME = DATEADD(day, 5, @Date1)
SELECT DATEDIFF(day, @Date1, @Date2) AS 'Разница в днях'
Результат:
Разница в днях
5
DATENAME()
Хочешь получить название дня недели или месяца, а не цифру? DATENAME() — то что надо.
-- Получить сегодняшний день
SELECT DATENAME(dw, getdate()) AS 'Сегодня'
-- Получить сегодняшний месяц
SELECT DATENAME(month, getdate()) AS 'Месяц'
Результат:
Сегодня
Понедельник
Месяц
Март
DAY(), MONTH(), YEAR()
Три простых функции-помощника: DAY(), MONTH(), YEAR(). Вытаскивают соответствующую часть из даты.
SELECT DAY(getdate()) AS 'День'
SELECT MONTH(getdate()) AS 'Месяц'
SELECT YEAR(getdate()) AS 'Год'
Результат:
День
13
Месяц
3
Год
2023
Строковые функции
Со строками тоже часто приходится работать. Иногда нужно почистить данные, иногда — разобрать на части. Пройдемся по самым полезным.
ASCII()
ASCII() возвращает числовой код первого символа строки. Синтаксис: ASCII(character_expression).
Полезно, когда нужно проверить, что за символ попал в данные (например, невидимый пробел или табуляция).
SELECT ASCII('A') -- Вернет 65
CHAR()
CHAR() — обратная функция. Преобразует код ASCII обратно в символ. Синтаксис: CHAR(integer_expression).
SELECT CHAR(65) -- Вернет 'A'
LEFT() и RIGHT()
Вытаскиваем символы слева или справа. Синтаксис: LEFT(string, length) и RIGHT(string, length).
Например, нужно взять первые 3 символа кода товара:
SELECT LEFT('ABC-12345', 3) -- Вернет 'ABC'
SELECT RIGHT('ABC-12345', 5) -- Вернет '12345'
LTRIM() и RTRIM()
Обрезаем лишние пробелы слева (LTRIM) и справа (RTRIM).
SELECT LTRIM(' Hello') -- 'Hello'
SELECT RTRIM('Hello ') -- 'Hello'
REPLACE()
Меняем одну подстроку на другую. Синтаксис: REPLACE(string, find, replace).
Часто юзаю, чтобы починить кривые данные, например, заменить "г." на "город":
SELECT REPLACE('г. Москва', 'г.', 'город') -- Вернет 'город Москва'
CHARINDEX()
Ищет первое вхождение подстроки. Синтаксис: CHARINDEX(expression1, expression2 [, start_location]).
SELECT CHARINDEX('SQL', 'Microsoft SQL Server') -- Вернет 11
PATINDEX()
Похож на CHARINDEX, но можно использовать шаблоны (подстановочные знаки).
SELECT PATINDEX('%[b,B]read%', 'Tommy loves Bread') -- Вернет 13
LEN()
Длина строки. Просто и понятно.
SELECT LEN('Hello world') -- Вернет 11
STUFF()
Удаляет кусок строки и вставляет на его место другой. Синтаксис: STUFF(character_expression1, start, length, character_expression2).
Например, нужно заменить слово "SERVICES" на "DATABASE" в строке "SQL SERVICES is USEFUL":
SELECT STUFF('SQL SERVICES is USEFUL', 5, 8, 'DATABASE') -- Вернет 'SQL DATABASE is USEFUL'
SUBSTRING()
Вырезает часть строки. Синтаксис: SUBSTRING(expression, start, length).
SELECT SUBSTRING('abcdefgh', 2, 3) -- Вернет 'bcd'
LOWER() и UPPER()
Меняем регистр.
SELECT UPPER('this is Lower TEXT') -- 'THIS IS LOWER TEXT'
SELECT LOWER('THIS IS UPPER TEXT') -- 'this is upper text'
Полезные мелочи
Еще пара функций, которые могут пригодиться в повседневной работе.
NCHAR()
Возвращает символ Юникода по его коду.
SELECT NCHAR(97) -- Вернет 'a'
DIFFERENCE()
Сравнивает два слова по звучанию (через SOUNDEX). Возвращает число от 0 до 4. Чем выше число, тем больше похожи слова.
SELECT DIFFERENCE('Green', 'Greene') -- Вернет 4
QUOTENAME()
Добавляет к строке кавычки или скобки, чтобы сделать из нее валидный идентификатор SQL Server.
SELECT QUOTENAME('abc[]def') -- Вернет '[abc[]]def]'
REVERSE()
Переворачивает строку задом наперед.
SELECT REVERSE('namazzufuraM .dM') -- Вернет 'Md. Marufuzzaman'
Что еще посмотреть по SQL Server
Изучение SQL с нуля самостоятельно
Создание структуры базы данных для социальной сети
SQL Server. Работа с SELECT. Операции удаления, вставки и обновления данных
Хранимые процедуры в SQL Server
Введение в базы данных MS SQL Server
Установка MS SQL Server 2019 Express Edition
Установка SQL Server Management Studio
Основы SQL. Создание базы данных, таблиц и связей между ними
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта