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