sql中使用的最佳数据转换方法是什么

sql中使用的最佳数据转换方法是什么,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我需要在sql中将值转换为不同的数据类型。据我所知,我可以使用CONVERT、TRY\u CONVERT、PARSE和TRY\u PARSE内置函数中的任何一个来实现这一点 SELECT CONVERT(DECIMAL(18,2),'12'); SELECT TRY_CONVERT(DECIMAL(18,2),'12'); SELECT PARSE('12' AS DECIMAL(18,2)); SELECT TRY_PARSE('12' AS DE

我需要在sql中将值转换为不同的数据类型。据我所知,我可以使用
CONVERT
TRY\u CONVERT
PARSE
TRY\u PARSE
内置函数中的任何一个来实现这一点

SELECT 
    CONVERT(DECIMAL(18,2),'12');

SELECT 
    TRY_CONVERT(DECIMAL(18,2),'12');

SELECT 
    PARSE('12' AS DECIMAL(18,2));

SELECT 
    TRY_PARSE('12' AS DECIMAL(18,2));
SELECT 
    CAST('12' AS DECIMAL(18,2));

我需要澄清的是,在上述方法中,性能方面将某些值转换为不同数据类型的最佳方法是什么?

让我们谈谈转换、强制转换和解析,以比较性能,因为其他方法只是这些方法的一个变体

CONVERT
是特定于SQL Server的,
CAST
是ANSI

CONVERT
更灵活,因为您可以格式化日期等。除此之外,它们几乎相同。如果您不关心扩展功能,请使用CAST

PARSE
函数不是本机Sql函数,而是
.NET Framework
公共语言运行时相关函数。显然,这将带来性能开销,并且还需要数据库服务器上存在.NET CLR。尽可能继续使用现有的强制转换和转换函数

对于SQL Server:通常我会说-
CONVERT
是你的人

如果要转换特定的数据类型,请参阅下面的链接。示例包括
TRY\u PARSE
TRY\u CONVERT


参考资料:

这只是一个基准测试

declare @val DECIMAL(18,2);
declare @now datetime, @then datetime
DECLARE @intFlag INT

SET @intFlag = 1
select @then = getdate()
WHILE (@intFlag <=200000) begin
    set @val = CONVERT(DECIMAL(18,2),'12');
    SET @intFlag = @intFlag + 1
end
select @now = getdate()
print('CONVERT: ' + convert(varchar(50), datediff(millisecond, @then, @now)))

SET @intFlag = 1
select @then = getdate()
WHILE (@intFlag <=200000) begin
    Set @val = TRY_CONVERT(DECIMAL(18,2),'12');
    SET @intFlag = @intFlag + 1
end
select @now = getdate()
print('TRY_CONVERT: ' + convert(varchar(50), datediff(millisecond, @then, @now)))

--for other type of "conversion" also not including here....

对每一个进行基准测试并找出答案。你有你自己回答这个问题所需要的所有工具。
CONVERT: 106
TRY_CONVERT: 110
PARSE: 4726
TRY_PARSE: 4736
CAST: 106