SQL Server 2011 (Denali CTP3). 14 новых функций и 1 изменена.

by Alexey Knyazev 28. июля 2011 01:27

Совсем недавно в общем доступе появился SQL Server 2011 Denali CTP (Community Technology Preview) 3. Пора подводить небольшие итоги, т.к. релиз уже не за горами. О том, что нового нас ждёт, уже сейчас можно найти, в том числе и на просторах Рунета.
В CTP 3 появились 14 новых функций и 1 была изменена, именно о них я хочу рассказать.

Функции преобразования (Conversion functions)

PARSE

PARSE 
              (string_value AS 
              data_type [ USING 
              culture ] 
              )

Очень напоминает работы функций CAST и CONVERT, но в отличии от них, у функции PARSE есть параметр culture, который позволяет задать формат преобразования, зависимый от языковых особенностей. Так же сменить языковое окружение сеанса можно с помощью SET LANGUAGE.

Пример А:
SELECT PARSE('Monday, 13 December 2010' AS datetime2, 'en-US') AS Result
Результат:
Result
---------------
2010-12-13 00:00:00.0000000

Пример Б:
SELECT PARSE('€345,98' AS money, 'de-DE') AS Result
Результат:
Result
---------------
345.98

Пример B:
SET LANGUAGE = 'English'
SELECT PARSE('12/16/2010' AS datetime2) AS Result
Результат:
Result
---------------
2010-12-16 00:00:00.0000000



TRY_CONVERT
TRY_CONVERT 
              (data_type [ ( length ) ], 
              expression [, 
              style ] 
              )

Работает как функции CAST/CONVERT и при этом позволяет проверить возможность преобразовать входное значение в нужный тип, в случаи, если это невозможно, то функция возвращает NULL.

Пример A:
SELECT 
    CASE WHEN TRY_CONVERT(float,'test') IS NULL 
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result
Результат:
Result
------------
Cast failed



TRY_PARSE
TRY_PARSE 
              (string_value AS 
              data_type [ USING 
              culture ] 
              )

Проверяет возможность преобразовать значение с помощью PARSE, если это невозможно, то на выходе NULL.

Пример A:
SELECT
    CASE WHEN TRY_PARSE('Aragorn' AS decimal, 'sr-Latn-CS') IS NULL
        THEN 'False'
        ELSE 'True'
END
AS Result
Результат:
Result
---------------
False



Функции даты и времени (Date and time functions)




DATEFROMPARTS
DATEFROMPARTS 
              (year, 
              month, 
              day)

Из 3х параметров с типом INT функция формирует дату. Первый параметр (год) может быть числом от 1 до 9999, второй параметр (номер месяца) имеет ограничения от 1 до 12, а третий (число месяца) зависит от номера месяца и может быть от 1 до 31.

Пример A:
SELECT DATEFROMPARTS ( 2010, 12, 31 ) AS Result;
Результат:
Result
----------------------------------
2010-12-31



DATETIME2FROMPARTS
DATETIME2FROMPARTS 
              (year, 
              month, 
              day, 
              hour, 
              minute, 
              seconds, 
              fractions, 
              precision)

Функция возвращает тип DATETIME2 из набора входных параметров.

Пример A:
SELECT DATETIME2FROMPARTS ( 2010, 12, 31, 23, 59, 59, 1234567, 7 ) AS Result;
Результат:
Result
----------------------------------
2010-12-31 23:59:59.1234567



DATETIMEFROMPARTS
DADATETIMEFROMPARTS 
              (year, 
              month, 
              day, 
              hour, 
              minute, 
              seconds, 
              milliseconds)

Функция возвращает тип DATETIME из набора входных параметров.

Пример A:
SELECT DATETIMEFROMPARTS ( 2010, 12, 31, 23, 59, 59, 0 ) AS Result;
Результат:
Result
----------------------------------
2010-12-31 23:59:59.000



DATETIMEOFFSETFROMPARTS
DATETIMEOFFSETFROMPARTS 
              (year, 
              month, 
              day, 
              hour, 
              minute, 
              seconds, 
              fractions, 
              hour_offset, 
              minute_offset, 
              precision)

Функция возвращает тип DATETIMEOFFSET из набора входных параметров.

Пример A:
SELECT DATETIMEOFFSETFROMPARTS ( 2010, 12, 31, 14, 23, 23, 0, 12, 0, 7 ) AS Result;
Результат:
Result
----------------------------------
2010-12-31 14:23:23.0000000 +12:00



EOMONTH
EOMONTH 
              (start_date [, 
              month_to_add ] 
              )

Позволяет добавить к дате N месяцев. Работает аналогично функции dateadd( month, N, start_date ).

Пример A:
DECLARE @date DATETIME;
SET @date = '12/31/2010';
SELECT EOMONTH ( @date, 10 ) AS Result;
Результат:
Result
----------------------------------
2011-10-31 00:00:00.000



SMALLDATETIMEFROMPARTS
SMALLDATETIMEFROMPARTS 
              (year, 
              month, 
              day, 
              hour, 
              minute)

Формирует SMALLDATETIME из входных параметров.

Пример A:
SELECT SMALLDATETIMEFROMPARTS ( 2010, 12, 31, 23, 59 ) AS Result
Результат:
Result
----------------------------------
2011-01-01 00:00:00



TIMEFROMPARTS
TIMEFROMPARTS 
              (hour, 
              minute, 
              seconds, 
              fractions, 
              precision)

Формирует на выходе время из входных параметров.

Пример A:
SELECT TIMEFROMPARTS ( 23, 59, 59, 0, 0 ) AS Result;
Результат:
Result
----------------------------------
23:59:59.0000000



Логические функции (Logical functions)




CHOOSE
CHOOSE 
              (index, 
              val_1, 
              val_2 [, 
              val_n ] 
              )

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

Пример A:
SELECT CHOOSE ( 3, 'Manager', 'Director', 'Developer', 'Tester' ) AS Result;
Результат:
Result
-------------
Developer



IIF
IIF 
              (boolean_expression, 
              true_value, 
              false_value)

Данная функция возвращает одну из двух частей в зависимости от результата вычисления выражения. Функцию IIf можно использовать везде, где может использоваться выражение. Функция IIf используется для определения, истинно или ложно другое выражение. Если такое выражение истинно, возвращается одно значение функции IIf; если ложно, IIf возвращает другое. Значения, возвращаемые функцией IIf, устанавливаются вручную.

Пример A:
DECLARE @a int = 45;
DECLARE @b int = 40;
SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;
Результат:
Result
--------
TRUE


Пример Б:
DECLARE @P INT = 1;
DECLARE @S INT = 2;
SELECT IIF ( 45 > 30, @p, @s ) AS Result;
Результат:
Result
--------
1



Строковые функции (String functions)




CONCAT
CONCAT 
              (string_value1, 
              string_value2 [, 
              string_valueN ] 
              )

Объединяет строки. Результатом является строка состоящая из аргументов.

Пример A:
SELECT CONCAT ( 'Happy', 'Christmas', 12, '/', '25' ) AS Result;
Результат:
Result
-------------------------
Happy Christmas 12/25


Пример Б (работа с NULL):
CREATE TABLE #temp (
    emp_name nvarchar(200) NOT NULL,
    emp_middlename nvarchar(200) NULL,
    emp_lastname nvarchar(200) NOT NULL
);
INSERT INTO #temp VALUES( 'Name', NULL, 'Lastname' );
SELECT CONCAT( emp_name, emp_middlename, emp_lastname ) AS Result;
Результат:
Result
------------------
NameLastname



FORMAT
FORMAT 
              (value, 
              format [, 
              culture ] 
              )

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

Пример A:
DECLARE @d DATETIME = '01/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS Result;
Результат:
Result
--------
01/01/2011


Пример Б:
DECLARE @d DATETIME = GETDATE();
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS Result
Результат:
Result
--------
28/07/2011


Это всё были новые функции, как раз 14 штук. Но ещё одна функция была изменена, а именно: математическая функция LOG() - Возвращает натуральный логарифм данного выражения типа float. По умолчанию основанием натурального логарифма является константа e (2,71828182845905…). Теперь у функции LOG() появился 2ой опциональный параметр, который позволяет задать основание.

LOG 
              (float_expression [, 
              base ] 
              )


Пример А:
select log(8) as log
select log(8, 2) as log2
Результат:
log
----------------------
2,07944154167984

log2
----------------------
3



Это конечно же не весь перечень того нового, что появилось в SQL Server 2011, но об этом в следующий раз.

Tags: , ,

SQL Server

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading