gpt4 book ai didi

sql - 无法将值转换为 float

转载 作者:行者123 更新时间:2023-12-03 07:56:55 25 4
gpt4 key购买 nike

我们有一个在 ColumnA 上执行 CAST 函数(到 FLOAT)的 SQL。 SQL 有一个过滤器,它最终会间接过滤掉那些在 ColumnA 中具有非数字值的行。但是,由于我认为是由于并行运行 SQL 的一部分,我相信 CAST 甚至应用于被过滤掉的行,这会导致 SQL 在“无法将值转换为浮点数... ”

我知道如果我通过添加查询提示来运行一个过程

OPTION (MAXDOP 1)

SQL 按预期运行。我怀疑在 1 proc 上运行会强制应用过滤器来清除 columnA 中具有非数值的行,以便其值的 CASTING 成功。我还发现使用查询提示
OPTION (FORCE ORDER)

解决了这个问题,我假设因为这也确保首先应用过滤器,并且我获得了在一个圆柱体上运行的更好的查询性能。

我倾向于使用第二个选项解决问题。如果我对这里发生的事情有任何误解,或者如果有人想阐述我的一般理解或提出建议,我将不胜感激。

我在继续

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1720.0 (X64) Jun 12 2010 01:34:59 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)



事后的想法:

T-SQL 具有以下功能来检查字符串是否可以转换为特定数据类型,这似乎会很好。

浮点数
是数字的
整数
等等

我真的对在我们的数据库中找到多少列定义为 varchar(255) 的各种数据感到恼火。我想解决办法是“不要那样做!”

最佳答案

关于你的事后想法。

It seems that it would be nice is T-SQL had the following functions to check to see if a string could be converted to a particular datatype.



SQL Server 2012 确实引入了 TRY_CONVERT 为了这个需要。所以下面的查询将返回 NULL而不是错误。
SELECT TRY_CONVERT ( FLOAT, 'Fish')

即使使用串行计划,也不能保证 WHERE条款将发生在 SELECT 之前被评估。如解释 in this blog post从 SQL Server 2005 开始,这种情况比以前的版本更有可能发生。 Behavior Changes to Database Engine Features in SQL Server 2005具体如下。

SQL Server 2005 sometimes evaluates expressions in queries sooner than when they are evaluated in SQL Server 2000. This behavior provides the following important benefits:

  • The ability to match indexes on computed columns to expressions in a query that are the same as the computed column expression.
  • The prevention of redundant computation of expression results.


关于这种行为的更多讨论在 Craig Freedman 的另一篇好博文中 Conversion and Arithmetic Errors .

在 2012 和 TRY_CONVERT 之前的版本上您需要包装 CAST AS FLOATCASE陈述。例如
  SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
FROM Table
WHERE ISNUMERIC(Col)=1

这仍然不能绝对保证防止您收到错误,如 ISNUMERIC本身只是检查该值是否会转换为数字数据类型之一,而不是专门用于 float An example of an input that would fail is '.'
CASE在线书籍中记录的大多是短路( some exceptions are discussed here)

您还可以在连接项目 SQL Server should not raise illogical errors 中找到关于此的其他讨论/投诉。和一个 good explanation of a similar issue通过 SQLKiwi

关于sql - 无法将值转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com