TRY_PARSE (Transact-SQL)

在 SQL Server 2012 中,返回表达式的结果(已转换为请求的数据类型);如果强制转换失败,则返回 Null。 TRY_PARSE 仅用于从字符串转换为日期/时间和数字类型。

主题链接图标 Transact-SQL 语法约定

语法

TRY_PARSE ( string_value AS data_type [ USING culture ] )

参数

  • string_value
    nvarchar(4000) 值,表示要解析为指定数据类型的格式化值。

    string_value 必须为所请求的数据类型的有效表示形式,否则 TRY_PARSE 将返回 Null。

  • data_type
    表示结果的所请求数据类型的文本。

  • culture
    可选字符串,它标识对 string_value 进行格式化的区域性。

    如果未提供 culture 参数,则使用当前会话的语言。 可以使用 SET LANGUAGE 语句隐式或显式设置此语言。 culture 接受 .NET Framework 支持的任何区域性;它不局限于 SQL Server 显式支持的语言。 如果 culture 参数无效,PARSE 将引发错误。

返回类型

返回表达式的结果(已转换为请求的数据类型);如果强制转换失败,则返回 Null。

注释

TRY_PARSE 仅用于从字符串转换为日期/时间和数字类型。 对于一般的类型转换,请继续使用 CAST 或 CONVERT。 请记住,分析字符串值会带来一定的性能开销。

TRY_PARSE 依赖于 .NET Framework 公共语言运行时 (CLR) 的存在。

此函数将不会进行远程处理,因为它依赖于 CLR 的存在。 远程处理需要 CLR 的函数会导致在远程服务器上出现错误。

有关 data_type 参数的详细信息

data_type 参数的值局限于下表中显示的类型以及样式。 提供的样式信息有助于确定允许使用哪些类型的模式。 有关样式的详细信息,请参阅 .NET Framework 文档中关于 System.Globalization.NumberStyles 和 DateTimeStyles 枚举的内容。

类别

类型

.NET 类型

使用的样式

数字

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

Double

NumberStyles.Float

数字

real

Single

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

en-US

Deutsch

德语

1031

de-DE

Français

法语

1036

fr-FR

日本語

日语

1041

ja-JP

Dansk

丹麦语

1030

da-DK

Español

西班牙语

3082

es-ES

Italiano

意大利语

1040

it-IT

Nederlands

荷兰语

1043

nl-NL

Norsk

挪威语

2068

nn-NO

Português

葡萄牙语

2070

pt-PT

Suomi

芬兰语

1035

fi

Svenska

瑞典语

1053

sv-SE

čeština

捷克语

1029

Cs-CZ

magyar

匈牙利语

1038

Hu-HU

polski

波兰语

1045

Pl-PL

română

罗马尼亚语

1048

Ro-RO

hrvatski

克罗地亚语

1050

hr-HR

slovenčina

斯洛伐克语

1051

Sk-SK

slovenski

斯洛文尼亚语

1060

Sl-SI

ελληνικά

希腊语

1032

El-GR

български

保加利亚语

1026

bg-BG

русский

俄语

1049

Ru-RU

Türkçe

土耳其语

1055

Tr-TR

British

英国英语

2057

en-GB

eesti

爱沙尼亚语

1061

Et-EE

latviešu

拉脱维亚语

1062

lv-LV

lietuvių

立陶宛语

1063

lt-LT

Português(巴西)

巴西葡萄牙语

1046

pt-BR

繁體中文

繁体中文

1028

zh-TW

한국어

朝鲜语

1042

Ko-KR

简体中文

简体中文

2052

zh-CN

Arabic

阿拉伯语

1025

ar-SA

ไทย

泰国语

1054

Th-TH

示例

A.TRY_PARSE 的简单示例

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

下面是结果集。

Result
---------------
NULL

(1 row(s) affected)

B.检测 TRY_PARSE 的 Null 值

SELECT
    CASE WHEN TRY_PARSE('Aragorn' AS decimal USING 'sr-Latn-CS') IS NULL
        THEN 'True'
        ELSE 'False'
END
AS Result;

下面是结果集。

Result
---------------
True

(1 row(s) affected)

C.将 IIF 用于 TRY_PARSE 和隐式区域性设置

SET LANGUAGE English;
SELECT IIF(TRY_PARSE('01/01/2011' AS datetime2) IS NULL, 'True', 'False') AS Result;

下面是结果集。

Result
---------------
False

(1 row(s) affected)

请参阅

参考

PARSE (Transact-SQL)

转换函数 (Transact-SQL)

TRY_CONVERT (Transact-SQL)

CAST 和 CONVERT (Transact-SQL)