2015-10-21 10 views
6

Если я запустил SQL-запрос ниже; Я получаю следующую ошибку:SQL Server: ошибка преобразования типа данных nvarchar в числовой

Error converting data type nvarchar to numeric.

COLUMNA содержит только цифры (положительные и отрицательные), включая поля с максимальной до двух знаков после запятой и сохраняется как точка десятичной.

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA] 
SELECT 
    COLUMNA AS COLUMNA_s 
    ,CASE WHEN [COLUMNA] = '' THEN 0 ELSE CONVERT(NUMERIC(18,2),REPLACE([COLUMNA],',','.')) END AS COLUMNA 
INTO st00_TABLEA 
FROM dbosu.TABLEA; 

Я также попытался следующие, но все же проблема:

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA] 
SELECT 
    COLUMNA AS COLUMNA_s 
    ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA 
INTO st00_TABLEA 
FROM dbosu.TABLEA; 
+0

Вы можете добавить образец COLUMNA –

+0

Я новичок в этом; как/где я могу загрузить образец? – bbilal

ответ

15

Вы, возможно, потребуется пересмотреть данные в столбце, но в любом случае вы можете сделать одно из следующих действий: -

1- проверить, если это числовое затем преобразовать его еще поместить другое значение как 0

Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1 
THEN CONVERT(DECIMAL(18,2),COLUMNA) 
ELSE 0 END AS COLUMNA 

2- выбрать только п umeric значения из колонки

SELECT COLUMNA AS COLUMNA_s ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA 
where Isnumeric(COLUMNA) = 1 
+0

Спасибо за ваш вклад; это дает мне еще одну ошибку: Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с 'REGEXP'. – bbilal

+0

@bbilal, пожалуйста, проверьте сейчас, я обновил запросы –

+0

Спасибо! Теперь это работает. Итак, в вашем запросе вы проверяете, являются ли ячейки числовыми; Если да; затем преобразуйте их. То, что я не понимаю; COLUMNA фактически имеет только числовые значения в таблице (как отрицательные, так и позитивные числа, а также нули). Вы знаете, почему проверка на isnumeric все еще необходима? – bbilal

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