Функции преобразования (Transact-SQL)

Tsql теория > Функции преобразования (Transact-SQL)
17.04.2013 11:15:37



Статья:

CAST, CONVERT Преобразует выражение одного типа данных в другой в SQL Server 2012.

CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Таблица преобразования типов данных

 

PARSE Возвращает результат выражения, преобразованный в требуемый тип данных в SQL Server 2012.

PARSE ( string_value AS data_type [ USING culture ] )

Значения NULL, передаваемые в качестве аргументов для PARSE, рассматриваются двумя способами:

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

  2. При передаче параметра со значением NULL во время выполнения происходит возврат значения NULL во избежание отмены всего пакета.

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

Для выполнения инструкции PARSE требуется среда CLR платформы .NET Framework.

Данная функция не будет работать удаленно, поскольку возможность ее работы зависит от наличия среды CLR. Удаленный вызов функции, требующей наличия среды CLR, приведет к ошибке на удаленном сервере.

Дополнительные сведения о параметре data_type

Значения параметра data_type ограничиваются списком типов, приведенным в следующей таблице, включая стили. Представленные сведения о стилях позволяют определить, какие типы шаблонов разрешены. Дополнительные сведения о стилях см. в документации по .NET Framework для перечислений System.Globalization.NumberStyles и DateTimeStyles.

Категория

Тип

Тип .NET Framework

Используемые стили

Числовой

bigint

Int64

NumberStyles.Number

Числовой

int (Целочисленное значение)

Int32

NumberStyles.Number

Числовой

smallint

Int16

NumberStyles.Number

Числовой

tinyint

Byte

NumberStyles.Number

Числовой

decimal

decimal

NumberStyles.Number

Числовой

numeric

decimal

NumberStyles.Number

Числовой

float

Двойной

NumberStyles.Float

Числовой

real

Одиночный

NumberStyles.Float

Числовой

smallmoney

decimal

NumberStyles.Currency

Числовой

money

decimal

NumberStyles.Currency

Дата и время

date

DateTime

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дата и время

time

TimeSpan

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дата и время

datetime

DateTime

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дата и время

smalldatetime

DateTime

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дата и время

datetime2

DateTime

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дата и время

datetimeoffset

DateTimeOffset

DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal

Дополнительные сведения о параметре культуры

В следующей таблице показаны сопоставления между языками SQL Server и культурами платформы .NET Framework.

Полное имя

Псевдоним

LCID

Конкретная культура

us_english

Английский

1033

ru-ru

Deutsch

Немецкий

1031

de-DE

Francais

Французский

1036

fr-FR

???

Японский

1041

ja-JP

Dansk

Датский

1030

da-DK

Espanol

Испанский

3082

es-ES

Italiano

Итальянский

1040

it-IT

Nederlands

Нидерландский

1043

nl-NL

Norsk

Норвежский

2068

nn-NO

Portugues

Португальский

2070

pt-PT

Suomi

Финский

1035

fi

Svenska

Шведский

1053

sv-SE

cestina

Чешский

1029

Cs-CZ

magyar

Венгерский

1038

Hu-HU

polski

Польский

1045

Pl-PL

romana

Румынский

1048

Ro-RO

hrvatski

Хорватский

1050

hr-HR

slovencina

Словацкий

1051

Sk-SK

slovenski

Словенский

1060

Sl-SI

????????

Греческий

1032

El-GR

български

Болгарский

1026

bg-BG

Сегодня

Русский

1049

Ru-RU

Turkce

Турецкий

1055

Tr-TR

British

Британский английский

2057

en-GB

eesti

Эстонский

1061

Et-EE

latviesu

Латышский

1062

lv-LV

lietuviu

Литовский

1063

lt-LT

Portugues (Brasil)

Бразильский

1046

pt-BR

????

Китайский (традиционный)

1028

zh-TW

???

Корейский

1042

Ko-KR

????

Китайский (упрощенный)

2052

zh-CN

Арабский

Арабский

1025

ar-SA

???

Тайский

1054

Th-TH

 

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

TRY_CAST ( expression AS data_type [ ( length ) ] )

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

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

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

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

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

SELECT 
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result;
GO
 
TRY_PARSE Возвращает результат выражения, преобразованный в запрошенный тип данных, или значение NULL, если привести тип в SQL Server 2012 не удается.Используйте инструкцию TRY_PARSE только для преобразования данных из строкового типа в типы даты или времени и числовые типы.
TRY_PARSE ( string_value AS data_type [ USING culture ] )

Простой пример использования TRY_PARSE

SELECT TRY_PARSE('Jabberwokkie' AS datetime2 USING 'en-US') AS Result;