2013-07-22 3 views
1

Я хотел бы обрабатывать десятичные значения 0,000000 и NULL в нуль-состоянии колонки как в NULLлитой десятичное значение NULL, если значение 0,000000

Например:

case worthColumn 
WHEN '0.000000' then NULL 
WHEN NULL then NULL 
ELSE worthColumn 
END 
AS SumOfWorth 

Но значение 0,000000 всегда заканчивается результатом?

+2

Похоже, ваши значения 0 не точно 0 (может быть, они что-то вроде 0,0000000001). Попробуйте округлить или отличить целое число и сравнить этот результат. Или используйте менее. –

+0

'nullif (worthColumn, 0)' или 'CASE worthColumn WHEN 0 THEN NULL ELSE worthColumn END' –

+0

Нет WorthColumn (десятичный (20,3), NULL), поэтому он содержит как 0.000000, так и NULL – aghaux

ответ

8

Если это десятичный знак, вам не нужно сравнивать его со строкой. Используйте NULLIF:

NULLIF(worthColumn,0)

Если вы используете следующий пример:

CREATE TABLE YourTable(A DECIMAL(20,3)); 

INSERT INTO YourTable 
VALUES (10),(1),(NULL),(0.000),(20); 

SELECT *, NULLIF(A,0) 
FROM YourTable 

Тогда вы получите следующие результаты:

╔════════╦══════════════════╗ 
║ A ║ (No column name) ║ 
╠════════╬══════════════════╣ 
║ 10.000 ║ 10.000   ║ 
║ 1.000 ║ 1.000   ║ 
║ NULL ║ NULL    ║ 
║ 0.000 ║ NULL    ║ 
║ 20.000 ║ 20.000   ║ 
╚════════╩══════════════════╝ 

(не может опубликовать sqlfiddle прямо сейчас, потому что пока что нет данных)

+0

Если я использую: NULLIF (x.heildarvirdi_sjods, 0), он заканчивается такими значениями, как 0.00000000, NULL и имеет некоторые значения, такие как 8018.00000000. Вы говорите, что 0,00000000 фактически не является нулевым значением (null)? – aghaux

+1

@agh Я не очень за тобой. Если тип данных столбца «decimal (20,3)», то значение '0' должно отображаться как« 0.000 », а не 8 десятичных цифр. И все равно '0' должен быть равен' 0,0000000', если вы не используете другой тип данных. Вы должны опубликовать определение таблицы и некоторые примеры данных. – Lamak

1

Попробуйте удалить котировки вокруг 0,000000:

case worthColumn 
WHEN 0.000000 then NULL 
WHEN NULL then NULL 
ELSE worthColumn 
END 
AS SumOfWorth 

Имея кавычки, вы сравниваете его со строкой.

0

Проблема - это числа, которые действительно близки к нулю, но вы не видите лишних цифр. Вот два способа сделать то, что вы хотите:

Численный метод:

case WHEN abs(worthColumn) < 0.0000005 then NULL 
    ELSE worthColumn 
END) AS SumOfWorth 

«Сделать это строка» метод:

(case when format(worthColumn, 6) = '0.000000' then NULL 
     ELSE worthColumn 
END) AS SumOfWorth 
Смежные вопросы