在SQL Server 2012中将数据类型nvarchar转换为浮点时出错

在SQL Server 2012中将数据类型nvarchar转换为浮点时出错,sql,sql-server,Sql,Sql Server,我有下面的代码 SELECT DISTINCT S.SCOPE ,convert(nvarchar, getdate(), 112) AS EFFECTIVE_START_TIME ,'99991231' AS EFFECTIVE_END_TIME ,LV.UOM_CODE ,'Gross Price' AS COLUMN_NAME_0 ,CONVERT(float,LV2.VALUE_0) * CONVERT(float,LV.VALUE_1)

我有下面的代码

SELECT DISTINCT
    S.SCOPE
    ,convert(nvarchar, getdate(), 112) AS EFFECTIVE_START_TIME
    ,'99991231' AS EFFECTIVE_END_TIME
    ,LV.UOM_CODE
    ,'Gross Price' AS COLUMN_NAME_0
    ,CONVERT(float,LV2.VALUE_0) * CONVERT(float,LV.VALUE_1) AS VALUE_0  
    ,'Quantity' AS COLUMN_NAME_1
    ,LV.VALUE_1
FROM 
    PM_SCOPE S 
JOIN 
    PM_LOOKUP_VALUE LV ON S.SCOPE_ID = LV.SCOPE_ID
JOIN 
    PM_LOOKUP_DEFINITION LD ON LD.LOOKUP_DEFINITION_ID = LV.LOOKUP_DEFINITION_ID
JOIN 
    PM_SCOPE S2 ON S2.COMP_PRODUCT = S.COMP_PRODUCT  
JOIN 
    PM_LOOKUP_VALUE LV2 ON LV2.SCOPE_ID = S2.SCOPE_ID
JOIN 
    PM_LOOKUP_DEFINITION LD2 ON LD2.LOOKUP_DEFINITION_ID = LV2.LOOKUP_DEFINITION_ID
WHERE 
    LD.LOOKUP_NAME = 'Competitor Bundle Details' 
    AND LD2.LOOKUP_NAME = 'Competitor Gross Price List'
    AND S.GEOGRAPHY = S2.GEOGRAPHY
    AND CONVERT(VARCHAR, LV2.UPDATED_AT, 112)  > CONVERT(VARCHAR, LV.UPDATED_AT, 112) 
当我运行它时,我得到了这个错误

Msg 8114,第16级,第5状态,第1行
将数据类型nvarchar转换为浮点时出错

然而,当我注释掉下面的行时,它是有效的

AND CONVERT(VARCHAR, LV2.UPDATED_AT, 112)  > CONVERT(VARCHAR, LV.UPDATED_AT, 112) 
我查看了数据,无法找出看到此错误的原因

我还查看了关于这个错误的现有帖子,它们似乎对我没有帮助

TRY_CONVERT(float,LV2.VALUE_0) * TRY_CONVERT(float,LV.VALUE_1) AS VALUE_0  --This will return NULL since the TRY_CONVERT results in a NULL for one of the columns, and NULL * anything is NULL
CONVERT(float,LV2.VALUE_0) * CONVERT(float,LV.VALUE_1) AS VALUE_0          --This will error out since you can't convert a nonnumeral to a FLOAT

SELECT ISNUMERIC(LV2.VALUE_0), ISNUMERIC(LV.VALUE_1)                       --This will tell you which column is causing you problems
下面是一些测试数据示例

SELECT TRY_CONVERT(float,'12.2y') * TRY_CONVERT(float,'12.25')       --This will return NULL since NULL * anything is NULL
SELECT CONVERT(float,'12.2y') * CONVERT(float,'12.25')               --This will error out since you can't convert 12.2y to a FLOAT
SELECT ISNUMERIC('12.2y'), ISNUMERIC('12.2')

你能给我们看一些样品数据吗?您可以使用
try\u convert
找到有问题的值。在上更新的
的实际数据类型是什么,我被错误弄糊涂了,因为它看起来像是您将
日期
转换为
varchar
,这应该不是问题。除非错误在
CONVERT(float,LV2.VALUE\u 0)
中,但在注释最后一行时仍然会出错…我怀疑问题可能是大于比较-为什么在执行此操作之前要转换为varchar?@honeybacker列的UPDATED\u数据类型为[datetime]。如果不将
updated\u at
转换为
varchar
,是否仍会出错?您可以使用try\u convert,以便在错误值期间返回null。。正确的方法是找到数据并提供适当的修正。这很奇怪,因为我的所有数据都是数字。这列中有一些真正的大数字吗?在LV.VALUE\u 1列中没有,值总是1。在LV2.VALUE_0中,我存储了一些价格,如1236238.58、095768.99等……您的值中有逗号吗?这将导致错误,但ISNUMERIC仍然返回1。i、 e.
选择convert(float,'14569845.66')
无逗号,仅句点。