我是SQL的新手。我正在努力从数据库中提取数据。我正在尝试提取Au值> 1.00的所有记录。
AttributeValue列为NVARCHAR
这是我尝试过的:
SELECT TOP 1000 [Id]
,[DHGeochemistryId]
,[AttributeColumn]
,[AttributeValue]
,[ModifiedDate]
,[ModifiedBy]
,[MRTDetailId]
FROM [DRILLHOLES_Export].[dbo].[DHGeochemistryAttr]
WHERE [AttributeValue] > 1.00 and [AttributeColumn] = 'Au'
该软件引发以下错误:
消息8115,第16级,状态8,第2行
将nvarchar转换为数值数据类型的算术溢出错误。
我尝试使用以下方法将其转换为数字:
SELECT TOP 1000 [Id]
,[DHGeochemistryId]
,[AttributeColumn]
,[AttributeValue]
,[ModifiedDate]
,[ModifiedBy]
,[MRTDetailId]
FROM [DRILLHOLES_Export].[dbo].[DHGeochemistryAttr]
SET myValue = CASE WHEN ISNUMERIC(AttributeValue)=1 THEN CAST(AttributeValue AS float)
ELSE 0 END)
WHERE [AttributeValue] > 1.00 and [AttributeColumn] = 'Au'
该软件引发以下错误:
Msg 102,第15级,状态1,第10行
'='附近的语法不正确。 (第10行是“ SET”命令)
我正在使用SQL Server 2014将不胜感激。
最佳答案
第一条语句抱怨,因为AttributeValue
不是数字列。您可以CAST
它:
WHERE CAST([AttributeValue] AS FLOAT) > 1.00
但是,如果其中的任何值都不为数字,则可能会出错。因此,可以在投射前使用
ISNUMERIC
:WHERE ISNUMERIC([AttributeValue]) = 1
AND CAST([AttributeValue] AS FLOAT) > 1.00
SQL Server非常聪明,可以使逻辑短路,因此,如果
CAST
子句的第一部分返回false,它就不会尝试使用WHERE
。