Pio*_*r L 2 sql-server data-conversion sql-server-2012
将大量(几乎 100 个)nvarchar 列转换为浮点数的最快方法是什么?
目前我有一堆 TRY_PARSE(column-name AS FLOAT) 语句,每列一个。
如果列不解析为浮动,我想要 NULL。没有错误通知,没有额外的智能。
有没有更快的方法?如果是的话,会是什么?
SQL Server 2012
TRY_PARSE只需一个简短的测试即可显示和之间的性能差异TRY_CAST
我的结果
TRY_CAST327 毫秒TRY_PARSE17784 毫秒这意味着,这TRY_CAST大约比TRY_PARSE(顺便说一句:性能TRY_CONVERT几乎相同)快 50 倍。TRY_CAST
尝试一下并发布你的结果;-)
SET LANGUAGE ENGLISH;
DECLARE @tbl TABLE(SomeFloatAsString VARCHAR(100),fl2 VARCHAR(100),fl3 VARCHAR(100),fl4 VARCHAR(100),fl5 VARCHAR(100),fl6 VARCHAR(100),fl7 VARCHAR(100),fl8 VARCHAR(100),fl9 VARCHAR(100),fl10 VARCHAR(100));
DECLARE @i INT=0;
WHILE @i<100000
BEGIN
INSERT INTO @tbl VALUES(RAND(),RAND(),RAND(),RAND(),RAND(),RAND(),RAND(),RAND(),RAND(),RAND());
SET @i+=1;
END
DECLARE @d DATETIME2 = SYSUTCDATETIME();
SELECT TRY_CAST(SomeFloatAsString AS FLOAT) fl1
,TRY_CAST(fl2 AS FLOAT) fl2
,TRY_CAST(fl3 AS FLOAT) fl3
,TRY_CAST(fl4 AS FLOAT) fl4
,TRY_CAST(fl5 AS FLOAT) fl5
,TRY_CAST(fl6 AS FLOAT) fl6
,TRY_CAST(fl7 AS FLOAT) fl7
,TRY_CAST(fl8 AS FLOAT) fl8
,TRY_CAST(fl9 AS FLOAT) fl9
,TRY_CAST(fl10 AS FLOAT)fl10
INTO #tmp1
FROM @tbl
SELECT DATEDIFF(MILLISECOND,@d,SYSUTCDATETIME())
DECLARE @d2 DATETIME2 = SYSUTCDATETIME();
SELECT TRY_PARSE(SomeFloatAsString AS FLOAT) fl1
,TRY_PARSE(fl2 AS FLOAT) fl2
,TRY_PARSE(fl3 AS FLOAT) fl3
,TRY_PARSE(fl4 AS FLOAT) fl4
,TRY_PARSE(fl5 AS FLOAT) fl5
,TRY_PARSE(fl6 AS FLOAT) fl6
,TRY_PARSE(fl7 AS FLOAT) fl7
,TRY_PARSE(fl8 AS FLOAT) fl8
,TRY_PARSE(fl9 AS FLOAT) fl9
,TRY_PARSE(fl10 AS FLOAT)fl10
INTO #tmp2
FROM @tbl
SELECT DATEDIFF(MILLISECOND,@d2,SYSUTCDATETIME());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |