Функция sql convert: Функции CAST и CONVERT (Transact-SQL) — SQL Server
Содержание
Функции конвертации типов данных доступные в SQL
Строчные функции конвертации типа данных разработаны для изменения типа данных столбца, выражения или литерала. Наиболее часто используемые функции конвертации это TO_CHAR, TO_NUMBER и TO_DATE. TO_CHAR преобразует числа и даты в символьные данные, когда TO_NUMBER и TO_DATE преобразует символьные данные соответственно в число и дату.
Функции конвертации
Oracle позволяет определять столбцы с типами данных ANSI, DB2 и SQL/DS. Эти типы преобразуется к типам данных Oracle. У каждого столбца определяется тип данных который ограничивает природу данных которые могут храниться в этом столбце. Столбец NUMBER не может хранить символьную информацию. Столбец DATE не может хранить случайные символы или числа. VARCHAR2 может хранить символьные эквиваленты чисел и дат.
Если функция у которой входной параметр является строкой получает на вход число, Oracle автоматически конвертирует его в символьный эквивалент. Если функция с входными параметрами типа данных число или дата получает на вход строку, то должны соблюдаться определённые условия для автоматической конвертации. Несмотря на то что автоматическая неявная конвертация доступна, гораздо более понятно и надёжно явно сконвертировать один тип данных в другой перед вызовом строчной функции.
Неявная конвертация типов
Значения, которые не соответствуют типам данных параметров функции неявно конвертируется перед выполнением если это возможно. Оба типа данных VARCHAR2 и CHAR используются как символьные типы данных. Символьные типы данных достаточно гибкие для хранения практически любой информации. Таким образом, ДАТА и ЧИСЛО можно легко преобразовать в их символьный эквивалент. Такая конвертация известна как преобразования число в строку и дата в строку. Рассмотрим следующие запросы
Query 1: select length(1234567890) from dual
Query 2: select length(SYSDATE) from dual
Оба запроса используют функцию LENGTH у которой входной параметр определён как строка. Число 1234567890 в запросе один неявно конвертируется в строку ‘1234567890’ перед вычисление функции LENGTH и результат функции будет 10. Запрос номер два вычисляет функцию SYSDATE предположим 7 апреля 2008 года. Результат преобразуется в строку ’07-APR-08’ и результат выполнения функции LENGTH будет число 9.
Обычно не принято допускать неявную конвертацию строк в числа, так как единственная ситуация, когда это возможно, это если строка представляет собой валидное число. Строка ‘11’ будет неявно преобразована в число 11, но строка ’11.123.345’ не будет, как показано в следующих примерах
Query 3: select mod(’11’, 2) from dual
Query 4: select mod(‘11.123’, 2) from dual
Query 5: select mod(‘11.123.456’, 2) from dual
Query 6: select mod(‘$11’, 2) from dual
Запросы 3 и 4 неявно преобразовали строки ‘11’ и ’11.123’ в числа 11 и 11.123 соответственно, перед вызовом функции MOD которая в свою очередь вернула результат 1 и 1.123. Запрос 5 вернул ошибку ‘ORA-1722: invalid number’, когда Oracle попытался неявно преобразовать строку в число, так как ‘11. 123.456’ не является корректным числом. Запрос 6 также вернул ошибку так как символ доллара не может бять неявно преобразован в число.
Неявная конвертация строки в дату возможна, когда строка удовлетворяет следующим шаблонам: [D|DD] separator1 [MON|MONTH] separator2][R|RR|YY|YYYY], где D и DD это день MON первые три буквы месяца, MONTH – полное название месяца. R и RR YY и YYYY отображают одну, две и четыре цифры года соответственно. Параметром separator1 и separator2 может быть практически любой спец символ, включая сюда пробел, табуляцию, знаки пунктуации и т.д. Таблица 10-2 показывает неявную конвертацию строки в дату, включая вызов функций работы с датами и результаты. Эти результаты предполагают, что система использует американскую локаль.
TIP Несмотря на то что неявная конвертация типов доступна, лучше использовать явный вызов функции конвертации перед использование данным в других функциях. Конвертация строки в число и дату использует маску форматирования.
Явная конвертация типов данных
Функции, которые конвертирует значение из одного типа данных в другой известны как явное преобразование типов. Они возвращают значение, которое будет гарантировано нужного типа данных и являются надёжным методом конвертации данных.
Число и дату можно явно конвертировать в строку используя функцию TO_CHAR. Строку можно явно конвертировать в число используя функцию TO_NUMBER. Функция TO_DATE используется для конвертации строку в DATE. Маски форматирования Oracle позволяют гибко контролировать процесс конвертации строки в число или дату.
Exam tip
Понимание широко используемых масок форматирования проверяется достаточно просто вопросами вида: какой результат вернёт вызов функций TO_CHAR(TO_DATE(’01-JAN-00′,’DD-MON-RR’),’Day’).
Использование функций TO_CHAR, TO_NUMBER и TO_DATE
При сертификации очень часто используются вопросы о функциях TO_NUMBER, TO_DATE и TO_CHAR с примерами для анализа. Обсуждение функции TO_CHAR разделим на две части: конвертация даты в строку и конвертация числа в строку. Такое разделение основано на том что для разных типов данных доступны разные маски форматирования. Помимо этих функций существует много других, но эти используется наиболее часто.
Использование функций конвертации
Во многих ситуациях возникает потребность в использовании функций конвертации, начиная от форматирования даты в отчётах и до проверки численных значений в символьных столбцах перед стартом арифметических вычислений.
Таблица 10-3 показывает синтаксис строчных функций конвертации данных
Необязательный параметр поддержки национального формата (nls_parameters) полезен для указания языка и форматирования, в котором названия дней, месяцев и разделители разрядов, целой и дробной части заранее предопределены. На рисунке 10-2 отображено представление NLS_SESSION_PARAMETERS которое содержит значения параментов NLS для текущей сессии. По умолчанию значение NLS_CURRENCY – знак доллара, но это можно изменить на уровне сессии. Например, для изменения символа валюты на строку ‘GBP’ можно выполнить запрос
ALTER SESSION SET NLS_CURRENCY=’GBP’
Рисунок 10-2 – Представление NLS_SESSION_PARAMETERS
Конвертация числа в строку используя функцию TO_CHAR
Функция TO_CHAR возвращает значение типа VARCHAR2. Когда входных параметром является число то доступны некоторые параметры форматирования. Синтаксис команды TO_CHAR(num, [format], [nls_parameter]). Параметр num обязательный и должен быть числом. Необязательный параметр format можно использовать для указания информации о форматировании, такой как длина, символ валюты, позиция разделителя дробной и целой части и разделитель разрядов (три разряда) и должен быть заключен в одинарные кавычки. Доступны различные опции форматирования и часть из них представлена в таблице 10-4. Рассмотрим два запроса
Query 1: select to_char(00001)||’ is a special number’ from dual;
Query 2: select to_char(00001, ‘0999999’)||’ is a special number’ from dual;
В запросе номер один у числа 00001 убираются ведущие нули, значение преобразуется в строку ‘1’ и возвращается результат ‘1 is a special number’. Зпрос номер два использует маску форматирования ‘0999999’ для числа 00001 преобразуя число в строку ‘0000001’ и возвращая результат ‘0000001 is a special number’. 0 и 6 девяток в маске форматирования указывают функции TO_CHAR что необходимо использовать ведущие нули, и длина строки должна быть 7. Таким образом строка, возвращаемая функцией TO_CHAR содержит семь символов.
Tip Конвертация чисел в строки надёжный способ убедиться что функция и SQL запрос в целом, который ожидает символьного значения, не вернёт ошибку когда встретится число. Конвертация чисел в строки часто используется для форматирования значений для отчетов. Маска форматирования поддерживает символ валюты, разделитель порядков и разделитель целой и дробной части, что часто используется при отображении финансовой информации.
Конвертация даты в строку используя функцию TO_CHAR
Вы можете использовать преимущества модели масок форматирования при конвертации ДАТЫ в практически любой вариант отображения даты как символьного значения используя функцию TO_CHAR. Синтаксис функции TO_CHAR(date1, [format], [nls_parameter]).
Только параметр date1 обязательный; тогда он должен быть значением, которое может неявно преобразоваться в строку. Необязательный параметр format регистрозависимый и должен быть обрамлён одинарными кавычками. Маска форматирования указывает какие лементы даты должы быть выбраны и как отображать названия элементов даты: полные названия или аббревиатуры. Названия дней и месяцев автоматически разделяются пробелом. Такое поведение можно изменить, используя параметр маски fill mode (fm). Указав в начале маски параметр fm, вы укажете Oracle о необходимости убрать все пробелы. Доступно много опций для маски форматирования, часть из которых отображена в таблице 10-5. Рассмотрим три запроса
Query 1: select to_char(sysdate)||’ is today»s date’ from dual;
Query 2: select to_char(sysdate,’Month’)||’is a special time’ from dual;
Query 3: select to_char(sysdate,’fmMonth’)||’is a special time’ from dual;
Если текущая системная дата 3 января 2009 года и по умолчанию формат отображения DD/MON/RR тогда запрос один вернёт строку ‘03/JAN/09 is todays date’. Во втором запросе обратите внимание на две детали: во-первых, только месяц выбирается из даты, и во-вторых так как маска форматирования регистрозавсимая и в запросе используется ‘Month’, то запрос вернёт ‘January is a special time’. Нет нужды добавлять пробел в начале литерала, так как функция TO_CHAR автоматически добавит пробел к названию месяца. Если бы маска во втором запросе была ‘MONTH’ то запрос вернул бы ‘JANUARY is a special time’. Параметр fm в третьем запросе препятствует добавлению пробелов и результатом будет ‘Januaryis a special time’. В таблице 10-5 предполагается что обрабатывается дата 2 июня 1975 года и текущий год 2009.
Параметры форматирования, связанные с неделей, кварталом, веком и другими более редко использующимися элементами даты показаны на рисунке 10-7. Столбец результата предполагает, что функция использовалась для работы с датой 24 сентября 1000 года, с маской форматирования указанной в столбец format element.
Компонент время в типе данных дата выбирается, используя модели форматирования в таблице 10-7. Результат рассчитывается функцией TO_CHAR используя дату 27 июня 2010 года время 21:35:13 с маской форматирования указанной в столбце format element.
Некоторые различные элементы, которые можно использовать в форматировании даты и времени перечислены в таблице 10-8. Знаки пунктуации используются для разделения элементов форматирования. Три типа суффиксов существуют для форматирования элементов. Более того, символьные литералы могут быть включены в модель форматирования если они заключены в двойные кавычки. Результаты в таблице 10-8 получены используя функцию TO_CHAR для даты 12 сентября 2008 года 14:31 с маской форматирования указанной в соответствующем столбце.
Таблица JOB_HISTORY хранит информацию о должностях сотрудника, которые он занимал в компании. Запрос на рисунке 10-3 выбирает информацию из этой таблицы о конце срока действия должности сотрудника для каждого сотрудинка на основании столбцов END_DATE, EMPLOYEE_ID и JOB_ID и форматирует результат в красивое предложение. Символьное выражение объединяется с функцией TO_CHAR в которой используется маска ‘fmDay «the «ddth «of» Month YYYY’. Параметр fm используется чтобы убрать пробелы в имени дня недели и месяца. Два литерата ограниченые двойными кавычками используются для добавления читабельности результату. Литерал “th” применяется к элементу даты чтобы сделать литературно правильным отображение даты как 17th или 31th. ‘Month’ в маске означает использовать полное имя месяца и наконец YYYY форматирует год как все четыре символа года.
Рисунок 10-3 – Запрос в таблицу JOB_HISTORY
select ‘Employee ‘||EMPLOYEE_ID||’ quit as ‘||JOB_ID||’ on ‘||TO_CHAR(END_DATE,’fmDay «the «ddth «of» Month YYYY’) «Quitting Date»
FROM JOB_HISTORY
ORDER BY END_DATE;
Несмотря на то что компонент «век» не отображается по умолчанию, он хранится в базе данных и доступен для запроса. Маска форматирования DD-MON-RR используется по умолчанию для ввода значений и отображения. Когда значение добавляется или изменяется если явно неуказан век, то используется век из функции SYSDATE. Формат RR отличается от формата YY и так как RR также использует значение столетия. Влияние значения столетия на формат RR легче понять если рассмотреть следующие принципы
- Если две последние цифры текущего года между 0 и 49, а в указанном значении даты две последние цифры года между 50 и 99 то используется предыдущий век. Предположим, что текущая дата 2 июня 2007 года. Значение века для даты 24-JUNE-94 года будет 20
- Если две цифры текущего года между 50-99 и указанной даты также между 55 и 99, то возвращается текущий век. Преположим что текущая дата 2 июня 1975 года. Тогда значение века для 24-JUL-94 будет 20.
- Если две цифры текущей даты между 50 и 99, а в укащанной дате год между 0 и 49 – то считается следующий век. Предположим, что текущая дата 2 июня 1975 года, тогда для значения 24-JUL-07 значение века будет 21.
Конвертация строки в дату используя функцию TO_DATE
Функция TO_DATE возвращает значение типа данных DATE. Строка, конвертируемая в дату может содержать все или часть компонентов, составляющих тип DATE. Когда строка содержащая только часть компонентов даты преобразуется в дату, Oracle использует значение по умолчанию для составления валидного значения типа DATE. Части строки сопоставляются с элементами даты используя маску (или модель) форматирования. Синтаксис функции TO_DATE(string1, [format], [nls_parameter]).
Только параметра string1 обязателен, и eсли маска форматирования не указана, string1 должна быть в формат неявно конвертируемом в дату. Необязательный параметр format используется практически всегда и должен быть заключён в одинарные кавычки. Маска форматирования идентича перечисленным в таблицах 10-5, 10-6, и 10-7. У функции TO_DATE есть модификатор fx, которые используется подобно параметру fm функции TO_CHAR. Параметр fx требует обязательного совпадения строки и маски форматирования. Если строка не совпадает с маской – возвращается ошибка. Рассмотрим несколько примеров
Query 1: select to_date(’25-DEC-2010′) from dual;
Query 2: select to_date(’25-DEC’) from dual;
Query 3: select to_date(’25-DEC’, ‘DD-MON’) from dual;
Query 4: select to_date(’25-DEC-2010 18:03:45′, ‘DD-MON-YYYY Hh34:MI:SS’) from dual;
Query 5: select to_date(’25-DEC-10′, ‘fxDD-MON-YYYY’) from dual;
Запрос 1 преобразует строку ’25-DEC-2010’ и строка может быть преобразована в дату используя маску DD-MON-YYYY. Дефис можно заменить на другой разделитель. Так как не было указано никакой информации о времени то используется значение по-умолчанию 00:00:00. Запрос 2 не может неявно преобразовать строку в дату, так как недостаточно информации и возвращается ошибка ORA-01840: input value is not long enough for date format. Указав маску DD-MON для строки ’25-DEC’ в запросе номер три, Oracle может преобразовать значение в дату, но так как год и время не указаны, в значении года будет использоваться значение года функции SYSDATE, а время установлено в полночь. Если текущий год будет 2009, то запрос 3 вернёт дату 25/DEC/09 00:00:00. Запрос 4 преобразует строку с явно указанными всеми компнонентами даты и времени. Запрос 5 использует параметра fx. Так как год в строке указан двумя символами, а требуемый формат предполагает четыре цифры года, то запрос возвращает ошибку ORA-01862: the numeric value does not match the length of the format item.
Конвертация строки в число используя функцию TO_NUMBER
Функция TO_NUMBER возвращает значение типа данных NUMBER. Исходная строка должна быть составлена таким образом, чтобы все несовместимые символы отсутствовали или были указаны в соответствующей маске форматирования. Синтаксис функции TO_NUMBER(string1, [format], [nls_parameter]). Только string1 является обязательным параметром, и если не указан параметр format то значение должно быть таким, чтобы была возможность неявно сконвертировать его в число. Маски форматирования идентичны перечисленным в таблице 10-4. Рассмотрим запросы
Query 1: select to_number(‘$1,000.55’) from dual;
Query 2: select to_number(‘$1,000.55′,’$999,999.99’) from dual;
Запрос один не может неявно преобразовать строку, так как она содержит знак валюты и разделители, которые явно неуказаны в маске, поэтому возвращается ошибка ORA-1722: invalid number. Запрос два находит символ валюты, запятой и точки в маске форматирования и несмотря на то что длина маски больше чем чем исходное значение в строке, возвращается число 1000.55
Exam tip
Функция TO_NUMBER конвертирует значение строки в число. Если вы используете число длиннее чем маска, возвращается ошибка. Если вы конвертируете число используя более длинную маску – возвращается значение исходной длины. Не путайте TO_NUMBER с TO_CHAR. Например TO_NUMBER(‘123.45’,’999.9’) вернёт ошибку, когда TO_CHAR(123.45,’999.9’) вернёт 123.6
—Взято отсюда http://www.sql.ru/forum/546853-2/est-li-u-kogo-gotovaya-funkciya-perevoda-translit-s-ruskogo-na-angliyskiy с небольшой корректировкой | |
ALTER FUNCTION [dbo].[fn_cc2ToTranslit] (@name NVARCHAR(MAX)) | |
RETURNS NVARCHAR(MAX) | |
BEGIN | |
DECLARE @TransTable TABLE( | |
Rus Char PRIMARY KEY | |
,Lat VarChar(2) | |
)INSERT @TransTable SELECT ‘А’,’A’ | |
UNION ALL SELECT ‘Б’,’B’ | |
UNION ALL SELECT ‘В’,’V’ | |
UNION ALL SELECT ‘Г’,’G’ | |
UNION ALL SELECT ‘Д’,’D’ | |
UNION ALL SELECT ‘Е’,’E’ | |
UNION ALL SELECT ‘Ё’,’Yo’ | |
UNION ALL SELECT ‘Ж’,’Zh’ | |
UNION ALL SELECT ‘З’,’Z’ | |
UNION ALL SELECT ‘И’,’I’ | |
UNION ALL SELECT ‘Й’,’Y’ | |
UNION ALL SELECT ‘К’,’K’ | |
UNION ALL SELECT ‘Л’,’L’ | |
UNION ALL SELECT ‘М’,’M’ | |
UNION ALL SELECT ‘Н’,’N’ | |
UNION ALL SELECT ‘О’,’O’ | |
UNION ALL SELECT ‘П’,’P’ | |
UNION ALL SELECT ‘Р’,’R’ | |
UNION ALL SELECT ‘С’,’S’ | |
UNION ALL SELECT ‘Т’,’T’ | |
UNION ALL SELECT ‘У’,’U’ | |
UNION ALL SELECT ‘Ф’,’F’ | |
UNION ALL SELECT ‘Х’,’H’ | |
UNION ALL SELECT ‘Ц’,’C’ | |
UNION ALL SELECT ‘Ч’,’Ch’ | |
UNION ALL SELECT ‘Ш’,’Sh’ | |
UNION ALL SELECT ‘Щ’,’Sh’ | |
UNION ALL SELECT ‘Ъ’,» | |
UNION ALL SELECT ‘Ы’,’Y’ | |
UNION ALL SELECT ‘Ь’,» | |
UNION ALL SELECT ‘Э’,’E’ | |
UNION ALL SELECT ‘Ю’,’Yu’ | |
UNION ALL SELECT ‘Я’,’Ya’ | |
DECLARE @Result VarChar(max) | |
SET @Result = @name | |
SELECT @Result = Replace(@Result,Upper(Rus) COLLATE Cyrillic_General_CS_AS,Lat) FROM @TransTable WHERE @name LIKE ‘%’ + Rus + ‘%’ | |
SELECT @Result = Replace(@Result,Lower(Rus) COLLATE Cyrillic_General_CI_AS,LOWER(Lat)) FROM @TransTable WHERE @name LIKE ‘%’ + Rus + ‘%’ | |
RETURN @Result | |
END |
Функция SQL CAST() — Разделы масштабирования
Функция SQL CAST()
Функция SQL CAST()
share-outline Курс по СУБД
Шрикант Варма
Бесплатно 90 005 Зарегистрировано:
21800
Курс СУБД
Шрикант Варма
Бесплатно
Начать обучение
Обзор
В SQL перед выполнением вычислений, когда используются два значения разных типов данных, SQL Server попытается преобразовать младший тип данных в более высокий. В SQL Server это называется неявным преобразованием.
У нас также есть явное преобразование типов, когда вы вызываете функцию CAST() для явного преобразования значения одного типа в другой. Будут случаи, когда вам придется использовать функцию, которая не возвращает значение в том типе данных, который вы хотите. Это когда вы используете явное приведение типов (или преобразование). Функции явного приведения типов, такие как CAST(), дают вам возможность преобразовать значение любого типа данных в желаемый тип данных.
Scope
Эта статья посвящена функции SQL CAST(). В этой статье мы узнаем:
- Знакомство с функцией CAST().
- Синтаксис функции CAST()
- Параметры/Аргументы в CAST()
- Возвращаемые значения
- Приложения
- И как преобразовать данные с помощью SQL CAST() и SQL CONVERT()
- С примерами
Введение в функцию SQL CAST()
Чтобы выполнить явное преобразование одного типа данных в другой, мы используем функцию CAST() в SQL. Если функция не может преобразовать данный тип данных в желаемый тип данных, она вернет ошибку. В противном случае он вернет преобразованное значение.
Синтаксис
Синтаксис функции SQL CAST() следующий:
Параметры/аргументы
Функция SQL CAST() принимает три параметра:
1. Выражение
Заданное значение для преобразования в другие данные тип.
2. Введите
Тип данных, в который вы хотите преобразовать выражение . Вы можете преобразовать свое выражение в любой из следующих типов данных:
- bigint
- интервал
- маленькое целое
- крошечный
- бит
- десятичный
- числовой
- деньги
- малые деньги
- поплавок
- реальный
- дата-время
- малая дата и время
- символ
- варчар
- текст
- нчар
- нварчар
- текст
- двоичный код
- варбинарный
- изображение
3.
Длина
Длина — необязательный тип данных. Здесь вы указываете длину типа данных, в который хотите преобразовать.
Возвращаемые значения
Функция SQL CAST(), если не удается выполнить преобразование в требуемый тип данных, возвращает ошибку. В противном случае он возвращает преобразованное значение типа данных.
Пример:
Вывод:
Вывод:
При использовании функции SQL CAST() необходимо помнить о нескольких важных вещах:
- При попытке преобразовать число с плавающей запятой или числового типа данных в целое число, функция CAST() усекает результат. Принимая во внимание, что для каждого другого преобразования функция CAST() будет округлять результат.
- Вы можете использовать функцию TRY_CAST(), если не хотите возвращать ошибку при сбое преобразования. Эта функция вернет null, если преобразование завершится ошибкой.
Приложения
Функция SQL CAST() используется для преобразования значения одного типа данных в другой тип данных. Следовательно, мы можем применять функцию CAST() везде, где хотим выполнить явное преобразование типов. Как и в этом примере,
Здесь значение с плавающей запятой 24,25 преобразуется в целое значение 24,9.0005
Узнайте, как преобразовывать данные с помощью SQL CAST и SQL CONVERT
И SQL CAST, и SQL CONVERT имеют одинаковую природу. Оба они преобразуют заданное значение типа данных в желаемый тип данных. Мы уже видели функцию SQL CAST(), теперь давайте кратко обсудим CONVERT().
Синтаксис
CONVERT Функция принимает четыре параметра. Три их типа, выражения и длины такие же, как в функции CAST . Четвертый параметр — это необязательный параметр, называемый стилем. Здесь вы можете указать стиль, используемый для преобразования данного типа данных в желаемый тип данных.
Единственная разница между SQL CAST и SQL CONVERT заключается в том, что SQL CONVERT() специфичен для SQL Server. Принимая во внимание, что функция CAST() является частью функций ANSI-SQL, которые широко доступны во многих других продуктах баз данных.
Другие примеры
Пример 1
student_table
ID | Имя | Высота |
---|---|---|
21 | Мудит | |
22 | Гейя | 155,4 |
23 | Пранав | 150,1 |
Команда SQL
Вывод
Пример 2 0004
Вывод
Пример 3
Команда SQL
Вывод
Заключение
В этой статье мы узнали об используемой функции SQL CAST() преобразовать значение данного типа данных в значение желаемого типа данных. Если функция CAST() не может преобразовать заданное значение типа данных в желаемый тип данных, она возвращает ошибку. В противном случае он возвращает преобразованное значение в желаемом типе данных.
Если мы не хотим возвращать ошибку, когда функция не может преобразовать тип данных, мы должны использовать функцию TRY_CAST(). Вместо того, чтобы возвращать ошибку, он возвращает нулевое значение.
Практическое руководство. Форматирование даты и времени в формате SQL с помощью функции преобразования T-SQL
Разработчики SQL и администраторы базы данных SQL Server часто преобразуют дату и время в строку в кодах sql, используя функцию преобразования t-sql.
Функция преобразования sql — это мощная функция преобразования со своими параметрами.
Одним из параметров функции даты формата SQL «Преобразовать» является параметр стиля.
Параметр стиля определяет формат выходной строки значения даты/даты и времени, выраженного в виде строкового значения.
Но поскольку существует около 40 различных форматов даты и времени, и поскольку программисты sql обычно имеют дело с датой формата sql и задачами форматирования даты и времени с разными форматами, трудно запомнить и помнить значение параметра стиля для каждого параметра формата даты sql.
Давайте еще раз вспомним синтаксис функции преобразования даты и времени t-sql:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
--T-sql преобразовать код примера использования функции datetime в формат даты mm-dd-yyyy
SELECT CONVERT(nvarchar(30),getdate(),110)
Код
На многих форумах по sql я обычно вижу вопрос «Как форматировать дату» и «Как форматировать значения даты и времени» в SQL Server.
Я создал простую вспомогательную процедуру SQL, надеясь, что она будет полезна для программистов SQL, чтобы ответить на их вопросы о проблемах преобразования даты и времени и форматах даты.
CREATE PROC SQLFormatDate
AS
SET NOCOUNT ON
CREATE TABLE #tt (
id INT IDENTITY (1,1),
строка даты NVARCHAR (30),
стиль INT
)
9000 4 DECLARE @style INT = 1
DECLARE @sql NVARCHAR(100)
WHILE @style < 150
BEGIN
SET @sql = 'SELECT CONVERT(nvarchar(100),getdate(),' + cast(@style as nvarchar(5))+ ')'
BEGIN TRY
ВСТАВИТЬ В #tt(строка даты) EXEC SP_EXECUTESQL @sql;
ОБНОВЛЕНИЕ #tt SET style = @style WHERE id = @@IDENTITY;
КОНЕЦ ПОПЫТКИ
НАЧАТЬ ПОМОЩЬ
КОНЕЦ ПОМОЩИ;
SET @style = @style + 1;
КОНЕЦ;
SELECT
строка даты,
стиль,
'SELECT CONVERT(nvarchar(100),getdate(),' + cast(style as nvarchar(5))+ ')' example
FROM #tt
DROP TABLE #tt
SET NOCOUNT OFF
GO
Код
Разработчики SQL могут выполнить описанную выше вспомогательную процедуру преобразования даты и времени sql, чтобы увидеть, как они могут использовать ее для использования даты и времени в формате sql в строку.
Все, что вам нужно сделать, это после создания вышеуказанной процедуры SQLFormatDate выполнить приведенный ниже оператор вызова t-sql sp.
EXEC SQLFormatDate
Код
Если вы установите Microsoft SQL Server Management Studio вывод запросов t-sql в виде текста, просто следуя в меню «Запрос> Результаты в> Результаты в текст» или просто набрав комбинацию клавиш Ctrl + T для отображения результатов вызова хранимой процедуры SQLFormatDate как текст.
Это позволит вам искать среди выходных форматов, так как вывод находится в одном окне и в текстовом формате.
Например, если вы хотите преобразовать переменные даты и даты в формате sql, используя функцию t-sql Convert в формате дд/мм/гггг, вы можете найти значение формата даты и времени сегодня в формате дд/мм/гггг, которое равно 11/01. /2010.
И когда вы ищете дд/мм/гггг, который имеет значение 01/11/2010, вы увидите, что соответствующий параметр стиля функции преобразования t-sql равен 103.
Также вы можете найти пример запроса sql , выберите оператор «SELECT CONVERT (nvarchar (100), getdate (), 103)», который вы можете протестировать функцию преобразования формата даты и времени tsql для выполнения в SQL Server Management Studio.
Обратите внимание, что выходные данные SQL-процедуры форматирования даты и времени SQLFormatDate показывают все форматы даты, доступные для разработчиков SQL, в одной единственной функции форматирования даты.
Но тем не менее разработчикам t-sql могут потребоваться более сложные форматы даты для их строковых выражений даты и времени.
Например, если требованием даты строки формата tsql является формат даты «дд-мон-гггг», который очень похож на строку даты, выводимую функцией Convert с параметром стиля, равным 106.
Поэтому просто скопируйте соответствующий пример столбца объявления SQLFormatDate внести некоторые изменения.
ВЫБЕРИТЕ ЗАМЕНУ (ПРЕОБРАЗОВАТЬ (nvarchar (30), getdate (), 106), ' ', '-')
Код
И вывод приведенного выше выражения для преобразования строки даты и времени такой, как мы хотели: 11-Jan-2010 (dd-Mon-yyyy)
Надеюсь, вы поняли, как хранимая процедура sql SQLFormatDate может помочь форматировать строковые значения даты и даты и времени. в целевых форматах даты sql.
Другой пример также ответит на общий вопрос разработчиков sql: как отформатировать столбец даты как ГГГГ-ММ-ДД?
На самом деле, когда вы выполняете хранимую процедуру sql convert date help «», вы можете видеть, что параметр стиля 23 точно решит нашу проблему.
-- форматирование столбца даты в формате ГГГГ-ММ-ДД
SELECT CONVERT(nvarchar(30),getdate(),23)
Код
Другой способ форматирования столбца даты в формате даты ГГГГ-ММ-ДД с использованием функции преобразования sql — это преобразование или преобразование столбца даты в строку с использованием функции преобразования sql с параметром стиля, равным 120.
Затем применение строковой функции sql LEFT или строковой функции sql SUBSTRING, как показано в приведенном ниже примере кодов tsql, определенно даст результаты в желаемых форматах даты ГГГГ-ММ-ДД.
SELECT LEFT(CONVERT(nvarchar(30),getdate(),120),10)
SELECT SUBSTRING(CONVERT(nvarchar(30),getdate(),120),1,10)
Код
Для разработчиков t-sql или администраторов баз данных SQL Server (DBS) приведенная выше хранимая процедура SQLFormatDate может быть полезна для просмотра всех доступных форматов с текущим значением даты и времени.