Описание convert sql: SQL Server функция CONVERT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Содержание

TRY_CONVERT (Transact-SQL) — SQL Server


  • Статья



Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)Конечная точка SQL в хранилище Microsoft Fabricв Microsoft Fabric

Возвращает значение, приведенное к указанному типу, если приведение проходит успешно; в противном случае возвращает NULL.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

data_type [ ( length ) ]
Тип данных, к которому следует привести expression.

expression
Приводимое значение.

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

style принимает те же значения, что и параметр style функции CONVERT. Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).

Диапазон допустимых значений определяется значением data_type. Если параметр style имеет значение NULL, функция TRY_CONVERT возвращает значение NULL.

Типы возвращаемых данных

Возвращает значение, приведенное к указанному типу, если приведение проходит успешно; в противном случае возвращает NULL.

TRY_CONVERT принимает переданное значение и пытается преобразовать его в указанный тип data_type. Если преобразование выполнено успешно, то TRY_CONVERT возвращает значение согласно указанному типу data_type; если возникла ошибка, возвращается значение NULL. Однако в случае, если будет запрошено явно запрещенное преобразование, функция TRY_CONVERT вернет ошибку.

При уровне совместимости 110 и выше TRY_CONVERT является зарезервированным ключевым словом.

Для серверов версии SQL Server 2012 (11.x) и выше данная функция может быть удаленной. Данная функция не может быть удаленной для серверов с версией ниже SQL Server 2012 (11.x).

Примеры

A. TRY_CONVERT возвращает NULL

В следующем примере показано, что TRY_CONVERT возвращает значение NULL, если не удается выполнить приведение.

SELECT   
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;  
GO  

Результирующий набор:

Result  
------------  
Cast failed  
  
(1 row(s) affected)  

В следующем примере показано, что выражение должно иметь ожидаемый формат.

SET DATEFORMAT dmy;  
SELECT TRY_CONVERT(datetime2, '12/31/2010') AS Result;  
GO  

Результирующий набор:

Result  
----------------------  
NULL  
  
(1 row(s) affected)  

Б. TRY_CONVERT возвращает ошибку

В следующем примере показано, что TRY_CONVERT возвращает ошибку, если не разрешается явное приведение.

SELECT TRY_CONVERT(xml, 4) AS Result;  
GO  

Результатом выполнения этой инструкции будет ошибка, так как целое число не может быть приведено к типу данных XML.

Explicit conversion from data type int to xml is not allowed.  

В. TRY_CONVERT выполняется успешно

В этом примере показано, что выражение должно иметь ожидаемый формат.

SET DATEFORMAT mdy;  
SELECT TRY_CONVERT(datetime2, '12/31/2010') AS Result;  
GO  

Результирующий набор:

Result  
----------------------------------  
2010-12-31 00:00:00.0000000  
  
(1 row(s) affected)  

См. также:

Функции CAST и CONVERT (Transact-SQL)

Microsoft SQL Server — реализация языка программирования SQL

Реализация языка программирования SQL

Microsoft SQL Server — система управления реляционными базами данных, разработанная корпорацией Microsoft и работающая только под Windows.

SQL Server использует процедурное расширение T-SQL (Transact-SQL). Сам язык SQL этой СУБД отличается от других реализаций SQL и иногда рассматривается как диалект T-SQL.

T-SQL поддерживает программные блоки (в виде процедур, которые хранятся в базе данных в скомпилированном виде и могут быть выполнены позднее создания, или анонимных блоков, которые не могут быть скомпилированы и используются только с виде скриптов), операторы управления потоком вычислений (в т.ч. условные переходы и циклы) и локальные переменные. Кроме того, T-SQL предоставляет ряд функций для работы со строками и датами, математических функций и т.д.

Для администрирования БД и разработки приложений для СУБД SQL Server может использоваться ряд инструментов, предоставляемых корпорацией Microsoft:

  • SQLCMD — инструмент с интерфейсом типа командной строки, предназначенный для выполнения команд SQL интерактивно или из скрипта; используется в качестве инсталляционного интерфейса по умолчанию.
  • Microsoft Visual Studio включает поддержку разработки для SQL Server.
  • SQL Server Management Studio — IDE для конфигурирования и управления БД SQL Server.

Факториал:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется рекурсивное определение факториала, реализованное через рекурсивный запрос. Каждая строка запроса содержит два числовых поля — n и n!, и каждая следующая строка вычисляется с использованием данных из предыдущей.

Можно вычислить целочисленные факториалы только до 20!. При попытке вычислить 21! возникает ошибка “Arithmetic overflow error”, т.е. происходит переполнение разрядной сетки.

Для вещественных чисел вычисляется факториал 100! (Для этого в примере необходимо заменить bigint на float в 3-ей строке)

with factorial(n, f) as
(
 select 0, convert(bigint,1) 
  union all
 select n+1, f*(n+1) from factorial where n<20
)
select cast(n as varchar)+'! = '+cast(f as varchar)
  from factorial

Числа Фибоначчи:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется итеративное определение чисел Фибоначчи, реализованное через рекурсивный запрос. Каждая строка запроса содержит два соседних числа последовательности, и следующая строка вычисляется как (последнее число, сумма чисел) предыдущей строки. Таким образом все числа, кроме первого и последнего, встречаются дважды, поэтому в результат входят только первые числа каждой строки.

with fibonacci(a, b) as
(
 select 1, 1
  union all
 select b, a+b from fibonacci where b < 1000
)
SELECT cast(a as varchar)+', ' AS [text()]
  FROM fibonacci
   FOR XML PATH ('')

Hello, World!:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012,

MySQL 5,

PostgreSQL 8.4,

PostgreSQL 9.1,

sqlite 3.7.3

select 'Hello, World!';

Факториал:

Пример для версий

Microsoft SQL Server 2005

declare @max_n tinyint = 20
;with t as (
   select 1 as n, convert(bigint,1) as f
   union all
   select n+1, f*(n+1) from t
   where n < @max_n
   
)
select convert(varchar,n)+'! = '+convert(varchar(32),f)+', ' 
from t as [text] 
FOR XML PATH ('')

Числа Фибоначчи:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется возможность рекурсивных запросов. Кол-во членов ряда — 92

declare @max_n tinyint = 92
;with t as (
	select n = 1, fib = convert(bigint,1), xfib = convert(bigint,0)
	 union all		  
	select n = n+1, fib = fib+xfib, xfib = fib from t 
        where n < @max_n
)
select fib from t

Как преобразовать номер месяца в название месяца в SQL и Snowflake

  • Часто задаваемые вопросы
  • 17 декабря 2020 г.

Нет встроенной функции для преобразования номера месяца в название месяца в SQL. Но для этого мы можем использовать комбинацию нескольких различных функций даты. Различные базы данных имеют разные встроенные функции даты.

Но прежде чем мы перейдем к этому, мы хотели бы показать вам очень простой способ сделать это.

Это называется «моделирование с низким кодом с помощью Datameer».

1. Datameer: ​​

Datameer — это многопользовательский инструмент преобразования, созданный для моделирования данных в Snowflake.

По нашему требованию Datameer имеет встроенную функцию «Название месяца», которая берет вашу дату, извлекает номер месяца и плавно выводит название месяца в соответствующем формате.

Посмотрите видео выше, чтобы увидеть, как это делается в Datameer.

2. MySQL:

В MySQL мы можем использовать комбинацию функций « MONTHNAME» и « STR_TO_DATE» , чтобы получить название месяца из номера месяца.

 ВЫБЕРИТЕ ИМЯ МЕСЯЦА(STR_TO_DATE(5, '%m')) КАК 'Название месяца'
-- Выход
# Название месяца

------------------
Может

ВЫБЕРИТЕ MONTHNAME(STR_TO_DATE(11, '%m')) AS 'Название месяца'
-- Выход
# Название месяца

--------------
ноябрь 

3. SQL SERVER:

В SQL SERVER мы можем использовать комбинацию функций « DATENAME» и « DATEADD» , чтобы получить название месяца из номера месяца.

 -- В запросе ниже 3-й параметр функции DATEADD может быть любой датой с 12-м месяцем
SELECT DATENAME(MONTH, DATEADD(MONTH, 1, '2000-12-01')) AS 'Название месяца'

-- Выход
Название месяца
-----------
январь

-- В запросе ниже 3-й параметр функции DATEADD может быть любой датой с 12-м месяцем
ВЫБЕРИТЕ DATENAME(MONTH, DATEADD(MONTH, 2, '2020-12-01')) AS 'Название месяца'

-- Выход
Название месяца
-----------
февраль

-- Или 3-й параметр может быть просто -1, как показано ниже
SELECT DATENAME( MONTH, DATEADD( MONTH, 12, -1)) AS 'Название месяца'

-- Выход
Название месяца
------------------
9 декабря0042

4. Oracle:

В Oracle мы можем использовать комбинацию функций «TO_CHAR» и «TO_DATE» , чтобы получить название месяца из номера месяца.

 ВЫБЕРИТЕ TO_CHAR(TO_DATE(1, 'ММ'), 'МЕСЯЦ') КАК "Имя месяца" ИЗ ДВОЙНОГО;

-- Выход
Название месяца
------------------
ЯНВАРЬ

ВЫБЕРИТЕ TO_CHAR(TO_DATE(3, 'MM'), 'МЕСЯЦ') AS "Название месяца" FROM DUAL;

-- Выход
Название месяца
------------------
9 МАРТА0042

Вот как преобразовать номер месяца в название месяца в SQL!

Вам нравится, насколько быстро и просто это делается с Datameer?

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


Уровень выше:

Узнайте  Как УДАЛИТЬ данные из таблицы путем объединения с другой таблицей в SQL

Практическое руководство с примерами

Время чтения: 7 минут

Функция SQL Server CONVERT — очень удобный инструмент, который нужно знать, когда дело доходит до запросов к базам данных SQL Server. CONVERT — это системная функция, которую мы можем использовать для очень простого преобразования значения из одного типа данных в другой на лету .

В этом очень кратком руководстве вы узнаете все, что вам нужно знать о функции ПРЕОБРАЗОВАТЬ. Мы рассмотрим несколько примеров его использования и обсудим несколько полезных советов, которые вам следует знать.

Мы обсудим эти темы:

  1. Что такое функция ПРЕОБРАЗОВАТЬ?
  2. Синтаксис функции ПРЕОБРАЗОВАТЬ.
  3. Примеры использования ПРЕОБРАЗОВАТЬ
  4. Разница между CAST и CONVERT
  5. Советы, рекомендации и ссылки.

Кстати, чтобы понять функцию CONVERT, вы должны кое-что понимать в типах данных . Хорошо ли вы разбираетесь в типах данных SQL Server? Если нет, загрузите БЕСПЛАТНОЕ РУКОВОДСТВО

БЕСПЛАТНОЕ одностраничное руководство по 10 основным типам данных, которые вам нужно знать!

Без лишних слов, давайте приступим к делу:

1.

Что такое функция ПРЕОБРАЗОВАТЬ?  

CONVERT — это системная функция T-SQL, используемая для преобразования столбца или выражения из одного типа данных в другой «на лету». В рамках его синтаксиса вы указываете стиль , который будет использоваться для преобразования, что делает его очень безопасной функцией преобразования.

Как уже упоминалось, CONVERT — это инструмент , специфичный для T-SQL , что означает, что он был изобретен Microsoft и может использоваться только в базе данных Microsoft SQL Server.

Кстати, это и есть T-SQL. Это разновидность стандартного языка SQL от Microsoft. В T-SQL есть несколько инструментов, которые компенсируют некоторые из недостатков стандартного языка SQL (как мы скоро узнаем).

2. Синтаксис функции ПРЕОБРАЗОВАТЬ

Синтаксис функции ПРЕОБРАЗОВАТЬ очень прост. Выполняется по следующей схеме:

CONVERT(<целевой тип данных>, <столбец или выражение>, [<необязательный номер стиля>])

Давайте обсудим каждую часть этого синтаксиса: , в который вы хотите преобразовать столбец или выражение.

  • Второй аргумент — это ваш столбец или выражение , которое вы хотите преобразовать «на лету»
  • Последний необязательный аргумент — число 9.0093 стиль , который вы хотите использовать для преобразования. Это просто число. Вскоре мы увидим, из каких чисел мы сможем выбирать.
  • Все эти аргументы разделены запятой и заключены в круглые скобки.

    Нам нужно рассмотреть несколько примеров (особенно в отношении аргумента в стиле . Что за ?) Примеры. Во-первых, давайте использовать CONVERT для преобразования простого целого числа в DECIMAL (без использования необязательного стиль аргумент):

    Результат: 100.00 . Десятичные разряды являются ключом к тому, что наше число теперь является типом данных DECIMAL, но мы можем использовать удобную системную функцию SQL_VARIANT_PROPERTY, чтобы доказать это:

    Хорошо.

    Как преобразовать целое число в строку:

    Одной из распространенных задач, которую вам может понадобиться выполнить, является преобразование целого числа в строку. Это очень просто сделать с помощью функции ПРЕОБРАЗОВАТЬ:

    И снова мы будем использовать SQL_VARIANT_PROPERTY, чтобы доказать, что результирующее значение является типом данных VARCHAR:

    Хорошо. Кстати, я мог бы использовать и обычный тип данных CHAR в своей функции CONVERT. Это еще один строковый тип данных. Узнайте больше обо всех строковых типах данных, доступных нам в SQL Server, здесь:

    Символьные типы данных SQL Server (и различия между ними)

    Использование необязательного аргумента «стиль» в функции CONVERT

    Хорошо, мы видели множество примеров использования CONVERT без аргумента в стиле . Но давайте, наконец, рассмотрим пример, в котором мы делаем используем аргумент в стиле , чтобы понять, почему иногда нам может понадобиться его использовать.

    Взгляните на следующую дату:

    11.05.2022

    Можно ли сказать, что эта дата 11 мая 2022 ? Если вы находитесь в Соединенных Штатах, вы бы сказали « Ну, да , конечно это ».

    Но подождите . Если вы находитесь в Англии, вы бы сказали, что эта дата 5 ноября 2022 . Во многих местах Европы пишут свои даты, начиная с числа , затем месяца, затем года.

    Хмм , так что, может быть, если мы хотим преобразовать строку «11.05.2022» в тип данных DATE, возможно, мы хотим избежать двусмысленности и убедиться, что полученное значение является американской датой 11 мая 2022 г. .

    Для этого нам нужно указать стиль в нашей функции CONVERT, который является просто числом. Номер стиля для даты и времени в США: 101 :

    Чтобы доказать, что эта дата 11 мая 2022 , я буду использовать удобную системную функцию DATEPART, чтобы записать месяц нашей даты:

    Если я запускаю тот же оператор, но указываю значение стиля British 103 вместо этого мы видим, что месяц результирующей даты теперь ноябрь :

    Опять же, все, что я изменил, это номер в стиле .

    Получить ?

    Вот ссылка на официальную документацию Microsoft по функции CONVERT, в которой описаны все различные стили , из которых вы можете выбрать: Приведение и преобразование (Transact SQL)

    Использование имени столбца или выражения в функции CONVERT

    Все это время я показывал вам жестко закодированные литеральные значения в качестве второго аргумента функции ПРЕОБРАЗОВАТЬ. Я хочу показать вам, что это не , все , которые вы можете использовать в функции ПРЕОБРАЗОВАТЬ.

    Взгляните на эту таблицу Books:

    Допустим, мы хотим взять значения из столбца Pages и преобразовать их все из целых чисел в строки. Нам просто нужно использовать имя столбца Pages в нашей функции CONVERT:

    Вот еще один быстрый пример. Системная функция GETDATE() возвращает текущую дату и время в виде типа данных DATETIME, как показано здесь (я пишу это 13 февраля 2022 г. ):

    время , и только хотите знать фактическую дату ? Мы можем использовать функцию CONVERT, чтобы просто преобразовать возвращаемое значение из GETDATE() в тип данных DATE (и мы укажем тип данных U.S. 9009).4, пока мы это делаем):

    Хорошо.

    4. Разница между CAST и CONVERT

    Ранее я упоминал, что язык T-SQL предлагает множество инструментов, компенсирующих недостатки стандартных инструментов SQL. Функция CONVERT — один из таких полезных инструментов T-SQL.

    Функция CAST является частью стандартного SQL. Он также может преобразовывать значения на лету , но не позволяет указать стиль при выполнении преобразования.

    Давайте посмотрим на один из наших предыдущих примеров и преобразуем «11.05.2022» в тип данных DATE, используя CAST:

    Вы можете видеть, что синтаксис немного отличается от CONVERT. Но самое главное, что нужно понять, это то, что нет никакого способа указать стиль при использовании CAST. Результирующее значение в нашем примере — 11 мая 2022 г. , что подтверждается повторным использованием DATEPART:

    Но что, если вы хотите преобразовать это значение с помощью Британский формат ? Вам не повезло . Я предполагаю, что вам нужно будет изменить входное значение на «11/5/2022», что, я полагаю, достаточно просто, если мы используем строковый литерал. Но что, если вы используете фактическое имя столбца или какой-то другой тип выражения, который вы не можете легко изменить?

    Ответ: Вместо этого используйте CONVERT!

    5. Советы, приемы и ссылки

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

    Совет № 1. Существует удобный вариант TRY_CONVERT, который вы можете использовать.

    Как вы думаете, что произойдет, если мы попытаемся запустить следующую инструкцию?:

    SELECT CONVERT(INT, 'Spagetti') AS 'Spagetti INT?'

    Ничего хорошего :

    Очевидно, вы не можете преобразовать слово « Спагетти » в целое число. Существует замечательный вариант функции CONVERT под названием TRY_CONVERT, который может нам помочь. Эта функция будет попробуйте преобразовать ваше входное значение в целевой тип данных, но если это не удастся, вы не получите сообщение об ошибке. Вместо этого он вернет NULL:

    Всегда лучше , а не генерировать сообщение об ошибке, если это возможно.

    Мы можем использовать TRY_CONVERT в качестве инструмента для обработки ошибок и фактически проверить, было ли наше преобразование успешным. Если преобразование прошло успешно, возвращается преобразованное значение. Если преобразование было неудачным , возвращается NULL. Это было бы здорово использовать в проверке ISNULL, например:

    Поскольку TRY_CONVERT вернул NULL, вместо этого мы возвращаем указанное значение по умолчанию 0 .

    Превосходно!

    Ссылки

    Существует отличная книга под названием T-SQL Fundamentals, написанная Ициком Бен-Ганом , в которой рассматриваются несколько основных концепций, которые вы должны знать о SQL Server, включая функцию CONVERT.