Удалить десятичные значения, только если все десятичные значения равны 0 - PullRequest
0 голосов
/ 08 октября 2019

Мне нужно выбрать столбец, удаляющий все десятичные значения, если все значения равны нулю.

Вот как выглядит таблица ввода, MYCOLUMN - числовое (18,2) поле типа:

+--------+
|MYCOLUMN|
+--------+
|1.00    |
+--------+
|1.00    |
+--------+
|1.50    |
+--------+
|2.00    |
+--------+
|2.60    |
+--------+

И вот что я пытаюсь добиться с помощью моего выбора:

+--------+
|MYRESULT|
+--------+
|1       |
+--------+
|1       |
+--------+
|1.50    |
+--------+
|2       |
+--------+
|2.60    |
+--------+

Я пытался с помощью простого оператора CASE, но, к сожалению, он не работает.

SELECT CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE CONVERT(INT, MYCOLUMN) END as MYRESULT

Все значения остаются в десятичном формате.

Ответы [ 3 ]

0 голосов
/ 08 октября 2019

Чтобы представить это в разных форматах, вам нужно преобразовать в строку. Следовательно, вы могли бы также сделать:

select replace(cast(col as varchar(255)), '.00', '')
0 голосов
/ 08 октября 2019

Вы почти поняли, что вам нужно разыграть результат, а не сам МИКОЛОН.

Итак, это:

SELECT CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE CONVERT(INT, MYCOLUMN) END as MYRESULT

Должно быть так:

SELECT CAST(CASE WHEN MYCOLUMN % 1 <> 0 THEN MYCOLUMN ELSE MYCOLUMN END AS INT) as MYRESULT

Разница: первое приведёт MYCOLUMN к int, затем вернетрезультат как числовой (базовый тип). В то время как второй будет читать значения как числовые (базовый тип), затем получит результат, после этого он приведёт этот результат к типу int. Таким образом, вам нужно будет привести результат к int вместо того же, что и во втором.

0 голосов
/ 08 октября 2019

Вы можете попробовать этот вариант ниже. Но так как вы не можете смешивать типы данных в одном столбце, вы можете использовать эту опцию, только если вывод STRING приемлем в желаемом выводе.

WITH your_table (MYCOLUMN)
AS(
    SELECT 1.00 UNION ALL
    SELECT 2.25
)

SELECT 
CASE 
    WHEN FLOOR(MYCOLUMN) = MYCOLUMN THEN CAST(FLOOR(MYCOLUMN) AS VARCHAR)
    ELSE CAST(MYCOLUMN AS VARCHAR)
END
FROM your_table  
...