2016-09-07 3 views
-1

У меня есть код нижеТип ошибки преобразования данных NVARCHAR плавать в SQL Server 2012

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, Level 16, State 5, Строка 1
Ошибка преобразования типа данных nvarchar в float.

Однако, когда я закомментировать строку ниже, она работает

AND CONVERT(VARCHAR, LV2.UPDATED_AT, 112) > CONVERT(VARCHAR, LV.UPDATED_AT, 112) 

Я посмотрел на данные и не удалось выяснить причину я вижу эту ошибку.

Я также просмотрел существующие сообщения для этой ошибки, и они, похоже, не помогают мне.

+0

Можете ли вы показать нам некоторые данные? Вы можете найти оскорбительные значения с помощью 'try_convert'. Каков фактический тип данных 'updated_at', я запутался в ошибке, так как это похоже на преобразование' date' в 'varchar', что не должно быть проблемой. Если ошибка не указана в 'CONVERT (float, LV2.VALUE_0)', но она все равно должна быть ошибкой при комментировании последней строки ... – HoneyBadger

+1

Я подозреваю, что проблема может быть больше, чем сравнение - почему вы конвертируете в varchar, прежде чем делать это? –

+0

@HoneyBadger тип данных столбца UPDATED_AT [datetime]. – Tanu

ответ

0
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') 
+0

это странно, для всех моих данных я просто вижу 1, когда я делаю ISNUMERIC. – Tanu

+0

У вас есть реальные цифры в этой колонке? – scsimon

+0

нет в столбце LV.VALUE_1, значение всегда равно 1. И в LV2.VALUE_0 Я храню некоторые цены, такие как 1236, 238.58, 0, 95768.99 и т. Д. – Tanu

Смежные вопросы