Цель этой статьи - поместить все наиболее часто используемые функции, связанные с SQL Server 2005/2008, в отдельную статью. Есть несколько функций, которые мы регулярно используем в SQL Server 2005/2008. Эта статья будет общим местом для всех этих функций с соответствующим примером. Это действительно поможет новичкам узнать о них все в рамках одной статьи.
Функции даты и времени в SQL Server
Ниже приведены наиболее часто используемые функции даты и времени в SQL Server.
- GETDATE()
- DATEADD()
- DATEPART()
- DATEDIFF()
- DATENAME()
- DAY()
- MONTH()
- YEAR()
GETDATE()
GETDATE() - очень часто используемый метод, который возвращает точную дату и время из системы. Он не принимает никаких параметров. Просто вызовите это как простую функцию.
Пример:
Declare @Date datetime set @Date = (SELECT GETDATE());Print @Date
Результат:
мар 13 2023 7:37PMВремя выполнения: 2023-03-13T19:37:55.6954185+03:00
DATEADD()
DATEADD() используется для добавления или вычитания даты и времени. Функция возвращает новую дату и время на основе добавленного или вычитаемого интервала. Общий синтаксис:
DATEADD(datepart, number, date)
Declare @Date datetime set @Date = (SELECT GETDATE());print @Date -- Print Current Date-- Adding 5 days with Current DateSELECT DATEADD(day, 5,@Date ) AS NewTime
Результат:
2023-03-18 19:42:03.813
DATEPART()
DATEPART() используется, когда нам нужна часть даты или времени из переменной datetime. Мы можем использовать метод DATEPART() только с помощью команды select.
Синтаксис:
DATEPART(datepart, date)
Пример:
-- Получить только годSELECT DATEPART(year, GETDATE()) AS 'Год'-- Получить только месяцSELECT DATEPART(month, GETDATE()) AS 'Месяц'-- Получить только часыSELECT DATEPART(hour, GETDATE()) AS 'Часы'
Результат:
Год2023----------Месяц3----------Часы19
DATEDIFF()
DATEDIFF() - очень распространенная функция для определения разницы между двумя элементами DateTime.
Синтаксис:
DATEDIFF(datepart, startdate, enddate)
Пример:
-- Declare Two DateTime VariableDeclare @Date1 datetime Declare @Date2 datetime -- Устанавливаем @Date1 текущим днемset @Date1 = (SELECT GETDATE());-- Устанавливаем @Date2 на 5 дней больше чем @Date1set @Date2 = (SELECT DATEADD(day, 5,@Date1 ))-- Получаем разницу датSELECT DATEDIFF(day, @Date1, @Date2) AS 'Разница в днях'
Результат:
Разница в днях5
DATENAME()
DATENAME() - очень распространенная и наиболее полезная функция для определения названия даты по значению datetime. Пример:
-- Получить сегодняшний день SELECT DATENAME(dw, getdate()) AS 'Сегодня'-- Получить сегодняшний месяцSELECT DATENAME(month, getdate()) AS 'Месяц'
Результат:
СегодняПонедельник--------------МесяцМарт
DAY()
DAY() используется для получения дня из любого объекта datetime. Пример:
SELECT DAY(getdate()) AS 'День'
Результат:
День13
MONTH()
SELECT MONTH(getdate()) AS 'Месяц'
Результат:
YEAR()
SELECT YEAR(getdate()) AS 'Год'
Результат:
Год2023
Строковые функции
Некоторые из строковых функций иногда оказываются очень удобными. Опишем их одну за другой.
ASCII()
Возвращает значение ASCII-кода крайнего левого символа символьного выражения.
Синтаксис:
ASCII ( character_expression )
Аргументы: character_expression - является выражением типа char или varchar. Типы возвращаемых значений: Int
Пример:
SELECT ASCII('A') SET TEXTSIZE 0SET NOCOUNT ON-- Создаем переменные для текущей позиции символьной строки -- и для символьной строки.DECLARE @position int, @string char(15)-- Initialize the variables.SET @position = 1SET @string = 'Hello'WHILE @position <= DATALENGTH(@string) BEGIN SELECT ASCII(SUBSTRING(@string, @position, 1)), CHAR(ASCII(SUBSTRING(@string, @position, 1))) SET @position = @position + 1 ENDSET NOCOUNT OFF
Результат:
CHAR()
Преобразует код int ASCII в символ. Синтаксис:
CHAR ( integer_expression )
Аргументы: integer_expression - является целым числом от 0 до 255. Возвращается значение NULL, если целочисленное выражение не находится в этом диапазоне.
Возвращаемые типы: символьные
Пример:
SET TEXTSIZE 0SET NOCOUNT ONDECLARE @intCounter intSET @intCounter = 0WHILE (@intCounter<= 255)BEGINSELECT 'CHAR - ' + CHAR(@intCounter) + '. ASCII - ' + CONVERT(VARCHAR,@intCounter) SET @intCounter = @intCounter + 1ENDSET NOCOUNT OFF
Результат:
CHAR - CHAR - . ASCII - 1CHAR - . ASCII - 2CHAR - . ASCII - 3CHAR - . ASCII - 4CHAR - . ASCII - 5CHAR - . ASCII - 6CHAR - . ASCII - 7CHAR - . ASCII - 8CHAR - . ASCII - 9CHAR - . ASCII - 10CHAR - . ASCII - 11CHAR - . ASCII - 12CHAR - . ASCII - 13и так далее ....
NCHAR()
Возвращает символ юникода, представляющий число, переданное в качестве параметра. Синтаксис:
NCHAR ( integer_expression )
Возвращаемые типы: символьные. Пример:
SELECT NCHAR(97)
На выводе получаем букву "а":
a
DIFFERENCE()
Возвращает целое значение, которое указывает на разницу между значениями SOUNDEX двух символьных выражений. Синтаксис:
DIFFERENCE(character_expression , character_expression)
Аргументы:character_expression - является выражением типа char или varchar. character_expression также может иметь тип text; однако значимыми являются только первые 8000 байт. Типы возвращаемых значений: Int. Пример:
-- Возвращает значение РАЗНИЦЫ, равное 4, наименьшей возможной разнице.SELECT SOUNDEX('Green'), SOUNDEX('Greene'), DIFFERENCE('Green','Greene');GO-- Возвращает значение РАЗНИЦЫ 0, максимально возможную разницу.SELECT SOUNDEX('Blotchet-Halls'), SOUNDEX('Greene'), DIFFERENCE('Blotchet-Halls', 'Greene');GO
Результат:
G650G6504-------------------B432G6500
LEFT()
Возвращает самые левые символы строки. Синтаксис:
LEFT(string, length)
string - указывает строку, из которой следует получить самые левые символы. length - указывает количество символов, которые необходимо получить. Пример:
SELECT LEFT('Marufuzzaman',5)
Результат:
Maruf
RIGHT()
Возвращает самые правые символы строки. Синтаксис:
string: указывает строку, из которой следует получить самые левые символы. length - указывает количество символов, которые необходимо получить. Пример:
SELECT RIGHT('Md. Marufuzzaman',12)
Результат:
LTRIM()
Возвращает символьное выражение после удаления начальных пробелов. Пример:
SELECT LTRIM(' Md. Marufuzzaman')
Результат:
RTRIM()
Возвращает символьную строку после усечения всех завершающих пробелов. Пример:
SELECT RTRIM('Md. Marufuzzaman ')
Результат:
REPLACE()
Возвращает строку со всеми экземплярами подстроки, замененными другой подстрокой. Синтаксис:
REPLACE(find, replace, string)
find - указывает строку, содержащую подстроку для замены всех экземпляров другой. Replace - указывает подстроку для поиска. String - указывает подстроку, которой следует заменить расположенную подстроку. Пример:
SELECT REPLACE('The codeProject is ?.','?', 'your development resource')
Результат:
The codeProject is your development resource.
QUOTNAME()
Возвращает строку в юникоде с добавленными разделителями, чтобы сделать входную строку допустимым идентификатором с разделителями Microsoft SQL Server. Синтаксис:
QUOTENAME ( 'character_string' [ , 'quote_character' ] )
Аргументы: character_string - представляет собой строку символьных данных в Юникоде. character_string - это системное имя, длина которого ограничена 128 символами. Входные данные, превышающие 128 символов, возвращают значение NULL. quote_character - представляет собой строку из одного символа, используемую в качестве разделителя. Может быть одинарной кавычкой ( ' ), левой или правой скобкой ( [ ] ) или двойной кавычкой ( " ). Если quote_character не указан, используются квадратные скобки. Типы возвращаемых данных: nvarchar(258) Примеры: в следующем примере используется символьная строка abc[]def и используются символы [ и ] для создания допустимого идентификатора с разделителями SQL Server.
SELECT QUOTENAME('abc[]def')
Результат:
[abc[]]def]
REVERSE()
Возвращает символьное выражение в обратном порядке. Пример:
SELECT REVERSE('namazzufuraM .dM')
Результат:
Md. Marufuzzaman
CHARINDEX()
CharIndex возвращает первое вхождение строки или символов в другую строку. Формат CharIndex приведен ниже:
CHARINDEX( expression1 , expression2 [ , start_location] )
Здесь expression1 - это строка символов, которая должна быть найдена в expression2. Итак, если вы хотите выполнить поиск ij по слову Abhijit, мы будем использовать ij как выражение 1 и Abhijit как выражение 2. start_location - это необязательный целочисленный аргумент, который определяет позицию, из которой будет выполняться поиск строки. Теперь давайте рассмотрим несколько примеров:
SELECT CHARINDEX('SQL', 'Microsoft SQL Server')
Результат:
11
Таким образом, он будет начинаться с 1 и продолжать поиск до тех пор, пока не найдет весь искомый строковый элемент и не вернет его первую позицию. Результат будет равен 0, если искомая строка не найдена. Мы также можем упомянуть Start_Location строки, подлежащей поиску. Пример:
SELECT CHARINDEX('SQL', 'Microsoft SQL server has a great SQL Engine',12)
Результат:
34
Таким образом, в приведенном выше примере мы можем получить результат 34, поскольку мы указали startLocation как 12, что больше начальной позиции SQL(11).
PATINDEX()
В отличие от этого PatIndex используется для поиска шаблона внутри выражения. Разница между CharIndex и PatIndex заключается в том, что последний допускает подстановочные знаки.
PATINDEX ('%pattern%' , expression)
Здесь первый аргумент принимает шаблон с подстановочными знаками, такими как '%' (означает любую строку) или '_' (означает любой символ). Например:
SELECT position = PATINDEX('%ter%', 'interesting data');
Результат:
3
Еще одна гибкость PATINDEX заключается в том, что вы можете указать количество символов, разрешенных в шаблоне. Допустим, вы хотите найти все записи, содержащие слова "Bread" или "хлеб" в строке, вы можете использовать следующее:
SELECT PATINDEX('%[b,B]read%', 'Tommy loves Bread')
Результат:
13
В этом примере мы упомянули как b, так и B в квадратных скобках. Результатом будет 13, что совпадает с тем, что мы искали в "Tommy loves bread".
LEN()
Len() - это функция, которая возвращает длину строки. Это самая распространенная и простая функция, которой пользуются все. Функция Len исключает завершающие пробелы.
SELECT LEN('Hello world')
Результат:
11
STUFF()
Stuff() - это еще одна функция T-Sql, которая используется для удаления символов указанной длины в строке и замены другим набором символов. Общий синтаксис STUFF выглядит следующим образом: STUFF(character_expression1, start, length, character_expression2)Character_Expression1 представляет строку, в которой должен быть применен stuff. start указывает начальную позицию символа в character_expression1, length - это длина символов, которые необходимо заменить. character_expression2 - это строка, которая будет заменена на начальную позицию. Пример:
SELECT STUFF('SQL SERVER is USEFUL',5,6,'DATABASE')
Результат:
SQL DATABASE is USEFUL
SUBSTRING()
SUBSTRING() возвращает часть строки из заданного символьного выражения. Общий синтаксис Substring выглядит следующим образом: ПОДСТРОКА(выражение, начало, длина) Здесь функция получает строку от начала до длины. Пример:
SELECT OUT = SUBSTRING('abcdefgh', 2, 3)
Результат:
bcd
Примечание: substring также работает с ntext, VARCHAR, CHAR и т.д.
LOWER / UPPER
Еще одна простая, но удобная функция - LOWER / UPPER. Она просто меняет регистр строкового выражения. Например:
SELECT UPPER('this is Lower TEXT')
Результат:
THIS IS LOWER TEXT