Совсем недавно в общем доступе появился 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, но об этом в следующий раз.