Cast t sql: Функции CAST и CONVERT (Transact-SQL) — SQL Server
Содержание
CAST и CONVERT: практическое руководство
Время прочтения: 9 минут
Две наиболее распространенные системные функции, с которыми вы столкнетесь как разработчик базы данных, — это функции CAST и CONVERT. Эти две функции работают одинаково, с небольшими различиями между ними. Тот, который вы используете, будет зависеть от ваших потребностей в то время.
CAST и CONVERT являются частью 6 лучших инструментов, которые вы должны знать для написания ПОТРЯСАЮЩИХ операторов Select. Если вы хотите узнать больше о других чрезвычайно распространенных и полезных инструментах запросов, ознакомьтесь с этим руководством.
Вам нужно знать разницу между этими двумя функциями преобразования? Вы не уверены, каким должен быть синтаксис? В этом уроке мы ответим на эти и другие вопросы!
Мы обсудим следующие темы:
- Функция преобразования CAST
- Пример использования CAST
- Функция преобразования CONVERT
- Пример использования CONVERT
- Варианты «TRY_» для CAST и CONVERT
- Советы, рекомендации и ссылки
Чтобы понять CAST и CONVERT, вы должны кое-что понимать в типах данных. Я создал БЕСПЛАТНОЕ руководство по наиболее распространенным типам данных в SQL Server, которые вы должны знать. Обязательно ознакомьтесь с ним:
БЕСПЛАТНОЕ одностраничное руководство по 10 основным типам данных, которые вам нужно знать!
Начнем с начала:
1. Функция преобразования CAST
Функция преобразования CAST используется, когда вам просто нужно преобразовать выражение или столбец из одного типа данных в другой на лету при написании запроса.
CAST — это «стандартная» функция. Слово «стандарт» относится к стандарту SQL , который признан Международной организацией по стандартизации ( ISO ) и Американским национальным институтом стандартов ( ANSI ).
(я знаю, » добраться до точки “ )
Идея состоит в том, что все поставщики средств управления базами данных соглашаются заставить свои системы работать с согласованным набором инструментов и правил.
Возвращаясь к нашей теме, системная функция CAST будет работать одинаково независимо от того, в какой системе управления базами данных она запущена. Вы можете запустить его на Microsoft SQL Server, Oracle, PostgreSQL и т. д., и он будет работать так же!
Говорят, что если у вас есть выбор, вы должны использовать стандартные инструменты более инструменты для конкретных поставщиков. Это потому, что если базу данных когда-нибудь потребуется переместить в другую систему управления базами данных, ничего не сломается.
Спойлер: Функция CONVERT — это специальный инструмент Microsoft, используемый исключительно в разновидности SQL T-SQL. Подробнее об этом, когда мы будем обсуждать CONVERT.
2. Пример использования CAST
Рассмотрим синтаксис функции CAST:
CAST(<столбец или выражение>) AS <целевой тип данных>)
Это довольно просто. Если у вас есть столбец или выражение, которое нужно преобразовать на лету , вы указываете его в качестве первого аргумента функции CAST.
Затем вы используете ключевое слово « AS », за которым следует тип данных, в который нужно преобразовать столбец или выражение.
Очень красиво читается, почти как в предложении.
Простой пример CAST
Давайте рассмотрим очень простой пример CAST. Допустим, мы хотим преобразовать число 7 до десятичного числа . Обычно это целое число, но мы хотим превратить его в десятичное число.
Допустим, мы хотим, чтобы десятичная дробь имела точность 4 и масштаб 2 . Другими словами, тип данных DECIMAL(4,2) .
Узнайте больше о типе данных DECIMAL: SQL Server DECIMAL: все, что вам нужно знать
Чтобы выполнить преобразование с помощью CAST, инструкция будет выглядеть так:
Довольно просто, правда? Если мы хотим добавить больше знаков после запятой, мы можем это сделать. Давайте изменим точность на 8 , и масштабируем до 6 :
Отлично, теперь у нас есть 6 знаков после запятой!
Мы также можем сделать обратное преобразование, когда мы преобразуем десятичное число в целое число .
Проверьте это:
И нет, операция CAST не просто «округлила в меньшую сторону». Когда вы конвертируете десятичное число в целое число, числа после десятичного числа усекаются . Если бы мы использовали CAST для преобразования 4.999999 в INT, мы все равно получили бы 4 .
Не верите? Позор вам :
Реальный пример CAST
Давайте подумаем о лучшем реальном примере того, когда мы могли бы захотеть использовать функцию CAST.
Представьте, что вы владелец небольшого деревообрабатывающего предприятия. Вы используете таблицу SQL для отслеживания продуктов в вашем инвентаре.
Вот данные в том Товары 9Таблица 0010:
Допустим, вам нужно знать среднюю цену вашей продукции. Вы можете использовать простой совокупный запрос, чтобы получить эту информацию:
Круто, но что, если вы хотите, чтобы это число было округлено до ближайшего целого цента? Другими словами, вы хотите видеть только 2 знаков после запятой вместо 6, которые он дает вам по умолчанию.
Для этого мы можем использовать CAST:
Отлично!
3. Функция преобразования CONVERT
Функция преобразования CONVERT используется, когда вам нужно преобразовать выражение или столбец из одного типа данных в другой на лету, и вам нужно указать «стиль» , чтобы избежать неоднозначности в результирующем значении.
CONVERT — это специальная функция преобразования T-SQL . Это означает, что это , а НЕ «стандарт».
T-SQL — это разновидность языка SQL от Microsoft. Microsoft признала, что в стандартных инструментах SQL есть некоторые недостатки, поэтому они изобрели свой собственный язык под названием T-SQL, который, конечно, основан на стандартном SQL, но имеет несколько довольно гладких улучшений, чтобы компенсировать недостатки стандартного SQL.
Вскоре мы поговорим о том, почему CONVERT является одним из таких «ловких» инструментов.
Спойлер: Это из-за «стиля», который вы можете использовать при конвертации.
4. Пример использования CONVERT
Во-первых, давайте рассмотрим синтаксис CONVERT. Это не так интуитивно понятно, как CAST :
CONVERT(<целевой тип данных>, <столбец или выражение>, [<необязательный номер стиля>])
Таким образом, ваш первый аргумент — это тип данных, который вы хотите использовать для столбца или выражение, в которое нужно преобразовать.
Затем вы намечаете свой столбец или выражение, затем стиль , который вы хотите использовать , если вам нужно .
(сейчас я расскажу вам, что означает « стиль »)
Все эти аргументы разделены запятой.
Простой пример CONVERT
Давайте рассмотрим еще один очень простой пример. На самом деле, давайте воспользуемся теми же примерами, которые мы использовали ранее, где мы хотим преобразовать целое число в десятичное число 9.0066 .
Мы будем использовать CONVERT для преобразования числа 7 в десятичное число (и пока опустим необязательную часть «стиля»):
целое число (и снова опустите необязательную часть «стиля»):
До сих пор CONVERT работал точно так же, как CAST, верно? Опять же, если все равно, вам следует использовать функцию CAST, потому что она стандартная.
Но «стиль» — это главное странный .
Реальный пример использования CONVERT
Итак, я достаточно долго дразнил эту штуку « в стиле ». Давайте углубимся в это.
Какой месяц и день этой даты?:
07.05.2021
« Почему, черт возьми, сегодня 7 мая ».
Вы уверены в этом? Как вы думаете, что сказали бы наши британские братья и сестры? Они пишут свои даты иначе, чем люди в Соединенных Штатах.
В Британии сначала пишут день , затем месяц , а затем год . Они смотрели на эту дату и говорили: « Ну, да, это 5 июля года».
Кто прав?
Вот почему иногда нам нужно указать стиль при преобразовании данных.
Допустим, мы хотим преобразовать строку «5/7/2021» в тип данных DATETIME, , и мы хотим убедиться, что она в формате США . Мы напишем следующий запрос:
Стиль — это просто числовой код. В нашем примере нам нужно использовать стиль 101 , чтобы представить формат США для нашей даты. Полный список стилей можно увидеть в официальной документации Microsoft: Cast and Convert (Transact SQL)
Чтобы дополнительно доказать, что эта преобразованная дата на самом деле 7 мая , давайте воспользуемся нашей удобной системной функцией DATENAME:
Now , давайте снова запустим тот же запрос, , но на этот раз сделайте это в британском формате :
Ну, я буду чертовски .
5. Варианты CAST и CONVERT «TRY_»
Существует проблема с CAST и CONVERT, о которой вам следует знать.
Как вы думаете, что произойдет, если мы попытаемся выполнить следующее преобразование:
SELECT CAST('Spagetti' AS INT)
Что ж, «Spagetti» — это, конечно, не число, так что это преобразование, скорее всего, будет ОШИБКА . Давайте попробуем:
Если конверсия не удалась, она терпит неудачу, большая . Весь запрос взрывается . Очевидно, что это может быть нежелательным эффектом, если у вас особенно длинный и сложный запрос.
Что если вместо ошибки мы просто вернем NULL ? Таким образом, весь запрос не взрывается.
Это возможно с вариантами CAST и CONVERT « TRY_ ». Идея в том, что мы пытаемся преобразование. Если это удается, мы возвращаем преобразованное значение. В противном случае мы возвращаем NULL .
Синтаксис чрезвычайно прост. Просто поставьте «TRY_» перед словом CAST или CONVERT (чтобы все это было TRY_CAST или TRY_CONVERT).
Давайте воспользуемся TRY_CAST в нашем примере и посмотрим, что получится:
Гораздо лучше!
Возможно, полезно привыкнуть к использованию «TRY_» вариаций CAST и CONVERT. Мы бы предпочли, чтобы наши запросы не взорвется , если мы попытаемся недопустимое преобразование .
6. Советы, приемы и ссылки
Вот список нескольких советов и приемов, которые вы должны знать о функциях CAST и CONVERT:
Совет №1: Существует такое понятие, как «
неявных преобразований »
Неявные преобразования — это преобразования типов данных, которые происходят автоматически без вашего участия. Так происходит все время.
Внимательно посмотрите на этот запрос:
SQL Server достаточно умен, чтобы распознать, что наше значение, хранящееся в @bigNum , является просто символьной формой числа . В этом случае SQL Server может неявно преобразовать эту строку в целое число, чтобы выполнить простое математическое уравнение.
Если мы снова попытаемся вставить туда «Спагетти», SQL Server поднимет руки и скажет: « Что вы делаете? «:
Иногда можно полагаться на неявный процесс преобразования, но иногда это не . Ваша задача — обеспечить выполнение явных преобразований при необходимости с помощью CAST или CONVERT.
Совет № 2: TRY_CAST и TRY_CONVERT были введены в
SQL Server 2012 .
Если вы попытаетесь использовать их в более старой версии, они не будут работать!
Ссылки
Существует отличная книга под названием T-SQL Fundamentals, написанная Ициком Бен-Ганом , в которой рассматриваются несколько основных концепций, которые вам следует знать о SQL Server, включая функции CAST и CONVERT. Эта книга помогла мне понять несколько важных инструментов и концепций Microsoft SQL Server. Вы точно не пожалеете, что приобрели эту книгу, поверь мне . Получите сегодня!
Также вот ссылка на официальную документацию Microsoft по теме функций преобразования. На этой странице вы найдете ссылки на функции CAST и CONVERT, а также на варианты «TRY_» каждой из них: Функции преобразования (Transact-SQL)
Следующие шаги:
Оставьте комментарий , если вы нашли это учебник полезный!
Чтобы понять преобразование типов данных, вам нужно сначала понять различные типы данных! Я составил отличное руководство, в котором рассматриваются наиболее распространенные типы данных, которые вы встретите и будете использовать при работе с SQL. Обязательно посмотрите:
БЕСПЛАТНОЕ одностраничное руководство по 10 основным типам данных, которые вам необходимо знать!
Как упоминалось ранее, CAST и CONVERT являются частью 6 лучших инструментов, которые вы должны знать для написания ПОТРЯСАЮЩИХ операторов Select. Если вы хотите узнать больше о других чрезвычайно распространенных и полезных инструментах запросов, ознакомьтесь с этим руководством.
Кроме того, часто вам придется писать сложные запросы, выполняющие преобразование данных, в хранимых процедурах . Убедитесь, что вы знакомы с ними и с тем, как они могут помочь вам стать отличным разработчиком SQL:
Хранимые процедуры: Полное руководство для начинающих
Большое спасибо за чтение!
Не забудьте подписаться на мою рассылку, чтобы получать специальные предложения и уведомления каждый раз, когда выходит новый учебник!
Если у вас есть вопросы, пожалуйста, оставьте комментарий . Или еще лучше, пришлите мне письмо!
Функции Cast() и Convert() в SQL Server
- 791. 6k
В этой статье мы увидим, как использовать функции приведения и преобразования в SQL Server 2012. Функции приведения и преобразования предоставляют аналогичные функции. Они используются для преобразования значения из одного типа данных в другой. Итак, давайте рассмотрим практический пример. Пример разработан в SQL Server 2012 с использованием SQL Server Management Studio.
Функция Cast() в SQL Server
Функция Cast() используется для преобразования переменной типа данных или данных из одного типа данных в другой тип данных. Функция Cast() предоставляет тип данных для динамического параметра (?) или значение NULL.
Синтаксис
CAST ( [Выражение]
Тип данных AS)
Тип данных, к которому вы приводите выражение, является целевым типом. Тип данных выражения, из которого выполняется приведение, является исходным типом.
Пример 1
- DECLARE @A varchar(2)
- DECLARE @B varchar(2)
- DECLARE @C varchar(2)
- установить @A=25
- установить @B=15
- набор @C=33
- Выберите CAST(@A as int) + CAST(@B as int) +CAST (@C as int) в качестве результата
Пример 2
- DECLARE @Z char(30)
- SELECT @Z=current_timestamp
- выберите CAST(@Z как дата) в качестве результата
Функция Convert() в SQL Server
При преобразовании выражений из одного типа в другой во многих случаях внутри хранимой процедуры или другой процедуры возникает необходимость преобразовать данные из типа datetime в тип varchar. Функция Convert используется для таких вещей. Функцию CONVERT() можно использовать для отображения данных даты/времени в различных форматах.
Синтаксис
CONVERT(тип_данных(длина), выражение, стиль)
Стиль — значения стиля для преобразования datetime или smalldatetime в символьные данные. Добавьте 100 к значению стиля, чтобы получить год с четырьмя разрядами, включающий столетие (гггг).
Пример 1
В этом примере мы берем значение стиля 108, которое определяет следующий формат:
HH: MM: SS
Теперь используйте вышеупомянутый стиль в следующем запросе: MM: SS
. В следующем запросе: MM: SS
.
- выберите конвертировать(varchar(20),GETDATE(),108)
В этом примере мы используем значение стиля 107, которое определяет следующий формат:
Mon dd, yy
Теперь используйте этот стиль в следующем запросе:
- select convert(varchar(20),GETDATE() ,107)
Пример 2
В этом примере мы видим разные значения стиля, которые определяют следующий формат.