sql中使用的最佳数据转换方法是什么
我需要在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
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