TRY_PARSE(Transact-SQL)

适用于:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric 中的SQL分析端点Microsoft Fabric中的仓库Microsoft Fabric中的SQL数据库

返回表达式的结果,转换为请求的数据类型,或 NULL 在 SQL Server 投射失败时返回。 仅用于 TRY_PARSE 字符串类型转换为日期/时间和数字类型。

Transact-SQL 语法约定

语法

TRY_PARSE ( string_value AS data_type [ USING culture ] )

参数

string_value

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

string_value 必须是请求数据类型的有效表示,否则 TRY_PARSE 返回空。

data_type

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

culture

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

如果未提供区域性参数,则使用当前会话的语言。 该语言通过使用 SET LANGUAGE 语句,可以隐式或显式地设置。 culture 接受任何由 .NET 框架支持的文化。 它并不限于SQL Server明确支持的语言。 如果区域性参数无效,PARSE则引发错误。

返回类型

返回表达式的结果,转换为请求的数据类型,或 NULL 在投射失败时返回。

备注

仅用于 TRY_PARSE 字符串类型转换为日期/时间和数字类型。 对于一般类型的转换,继续使用 CASTCONVERT。 请记住,解析字符串值会有一定的性能开销。

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

此函数无法进行远程控制,因为它取决于 CLR 的存在。 远程处理需要 CLR 的函数会导致在远程服务器上出现错误。

关于该 data_type 参数的更多信息

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

类别 类型 .NET 类型 使用的样式
Numeric bigint Int64 NumberStyles.Number
Numeric int Int32 NumberStyles.Number
Numeric smallint Int16 NumberStyles.Number
Numeric tinyint Byte NumberStyles.Number
Numeric 十进制 Decimal NumberStyles.Number
Numeric numeric Decimal NumberStyles.Number
Numeric 漂浮 Double NumberStyles.Float
Numeric 真实 Single NumberStyles.Float
Numeric smallmoney Decimal NumberStyles.Currency
Numeric 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

关于该 culture 参数的更多信息

下表显示从 SQL Server 语言到 .NET Framework 区域性的映射。

完全名称 Alias LCID 特定区域性
us_english 英语 2052 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-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
葡萄牙语(巴西) 葡萄牙语(巴西) 1046 pt-BR
繁體中文 繁体中文 1028 zh-TW
한국어 韩语 1042 Ko-KR
简体中文 简体中文 2052 zh-CN
阿拉伯语 阿拉伯语 1025 ar-SA
ไทย 泰语 1054 Th-TH

示例

A. TRY_PARSE的基本例子

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

此查询返回的结果为 NULL

B. 用TRY_PARSE检测空算

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

此查询返回的结果为 True

°C 使用IIF配合 TRY_PARSE 和隐式文化设置

SET LANGUAGE English;

SELECT IIF (TRY_PARSE ('01/01/2011' AS DATETIME2) IS NULL, 'True', 'False') AS Result;

此查询返回的结果为 False