46546546
45.04545
4545.5454
5.0
545.0
0.0
0.025
NULL
CAST(CAST(ISNULL(column,'sale') as float) as nvarchar)
--float округляет и значения NULL мешают в преобразовании
REPLACE(ISNULL(column, 'sale'),'.0$','')
--не срабатывает
DECLARE @Table TABLE ( [Column] NVARCHAR(50))
INSERT @Table VALUES
('46546546'),
('45.04545'),
('4545.5454'),
('5.0'),
('545.0'),
('0.0'),
('0.025'),
(NULL)
SELECT ISNULL(FORMAT( CAST( [Column] AS FLOAT ), '', 'en-US' ), 'sale')
FROM @Table
46546546
45.04545
4545.5454
5
545
0
0.025
sale
DECLARE @Table
TABLE ( [Column] NVARCHAR(50),
[ColumnNeed] AS ISNULL(FORMAT( CAST( [Column] AS FLOAT ), '', 'en-US' ), 'sale'));
INSERT @Table VALUES
('46546546'),
('45.04545'),
('4545.5454'),
('5.0'),
('545.0'),
('0.0'),
('0.025'),
(NULL)
SELECT ColumnNeed
FROM @Table
Проблема в значениях типа 5.0 так как их мне нужно преобразовать в просто 5
CAST AS INT
. Но вообще надо детальнее. Что с остальными десятичными, что в какую сторону округляется, опишите логику целикома NULL в sale
CASE
WHEN val IS NULL
THEN "sale"
END
SELECT CASE WHEN [column] IS NULL
THEN 'sale'
WHEN CHARINDEX([column], '.') > 0
THEN LEFT([column], CHARINDEX([column], '.') - 1)
ELSE [column]
END AS [column]
FROM source_table;
как есть 2-я таблица с такимеже значениями только без .0 и без NULL . А мне в дальнейшем нужно сравнить эти 2 таблицы
SELECT *
FROM table1
JOIN table2 ON table1.[column] = CASE WHEN table2.[column] IS NULL
THEN 'sale'
WHEN CHARINDEX(table2.[column], '.') > 0
THEN LEFT(table2.[column], CHARINDEX(table2.[column], '.') - 1)
ELSE table2.[column]
END;