在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')
无逗号,仅句点。