簡體   English   中英

在 SQL 服務器中將負 Varchar、Null 轉換為十進制

[英]Convert Negative Varchar, Null to Decimal in SQL Server

我正在嘗試將我的度量列值之一從varchar轉換為decimal(20,3) 第三個值是 null 值,沒有任何空格,為了讓您理解我用引號括起來。 我嘗試過使用CAST ,但CAST無法將數據類型更改為具有負號。 但我想保持負值。

我嘗試使用TRY_CONVERTTRY_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轉換為numericdecimal也可以。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM