[英]Convert Negative Varchar, Null to Decimal in SQL Server
我正在嘗試將我的度量列值之一從varchar
轉換為decimal(20,3)
。 第三個值是 null 值,沒有任何空格,為了讓您理解我用引號括起來。 我嘗試過使用CAST
,但CAST
無法將數據類型更改為具有負號。 但我想保持負值。
我嘗試使用TRY_CONVERT
和TRY_CAST
但這並沒有給出預期的結果。 如果有人可以提供幫助將非常有幫助。 我在下面嘗試過
CAST(COALESCE((NULLIF(SalesColumn,'')),'0') AS NUMERIC(20,12))
-992.0
0
您可以在nullif()
中添加另一個coalesce()
) 來處理 null 值。 請查看以下示例。
declare @var as varchar(50);
set @var=null;
select cast(COALESCE((NULLIF(coalesce(trim(@var),0),'')),'0') AS NUMERIC(20,12))
GO
| (No column name) | | ---------------: | | 0.000000000000 |
declare @var as varchar(50);
set @var=' ';
select cast(COALESCE((NULLIF(coalesce(trim(@var),0),'')),'0') AS NUMERIC(20,12))
GO
| (No column name) | | ---------------: | | 0.000000000000 |
declare @var as varchar(50);
set @var='- 992 ';
select cast(COALESCE((NULLIF(coalesce(trim(@var),0),'')),'0') AS NUMERIC(20,12))
GO
| (No column name) | | ----------------: | | -992.000000000000 |
db<> 在這里擺弄
我使用 SQL Server 2017 並且CAST
工作得很好並保持“-”-符號,下面是一個示例。 請注意舍入,您可能需要先使用ROUND()
將其轉換為decimal(20,3)
,方法是首先使用ROUND()
() 將其轉換為精度更高的小數,然后將其轉換為decimal(20,3)
。
在NULL
上使用CAST
轉換為numeric
或decimal
也可以。
DECLARE
@Val1 VARCHAR(10) = '-992.123'
,@Val2 VARCHAR(10) = '-45678'
,@Val3 VARCHAR(10) = NULL
,@Val4 VARCHAR(10) = ''
,@Val5 VARCHAR(10) = '321'
,@Val6 VARCHAR(10) = ' '
SELECT ISNULL(CAST(NULLIF(A, '') as decimal(20,3)), 0)
FROM (
VALUES (@Val1), (@Val2), (@Val3), (@Val4), (@Val5), (@Val6)
) Sub (A)
這給出了結果..
---------------------------------------
-992.123
-45678.000
0.000
0.000
321.000
0.000
(6 rows affected)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.