TRY_PARSE (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

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

Transact-SQL 语法约定

语法

TRY_PARSE ( string_value AS data_type [ USING culture ] )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

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

类别 类型 .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 小数 NumberStyles.Number
Numeric FLOAT Double NumberStyles.Float
Numeric real Single NumberStyles.Float
Numeric smallmoney 小数 NumberStyles.Currency
Numeric money 小数 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 zh-CN
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
Português (Brasil) 葡萄牙语(巴西) 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;  

下面是结果集:

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)