首页 > 解决方案 > 在 SQL Server 中将 NULL 或 0.00 替换为 00.00

问题描述

我有一个要求,如果列是 NULL 或 '',则将其替换为 '00.00'。列的数据类型为VARCHAR(11),我尝试了此处显示的 3 种方法。前两个对我不起作用,然后我尝试了CASE,但它返回的结果为“0.00”。严格来说,我需要数据为 '00.00'

COALESCE(SALES_TAX_BASE, '00.00') AS SALES_TAX_BASE

ISNULL(SALES_TAX_BASE, '00.00') AS SALES_TAX_BASE

CASE 
   WHEN CAST(SALES_TAX_BASE AS VARCHAR(11)) = '' THEN '00.00'
   WHEN CAST(SALES_TAX_BASE AS VARCHAR(11)) = NULL THEN '00.00'
   WHEN CAST(SALES_TAX_BASE AS VARCHAR(11)) = '0.00' THEN '00.00'
   WHEN CAST(SALES_TAX_BASE AS VARCHAR(11)) = '0' THEN '00.00'  
   ELSE SALES_TAX_BASE 
END AS SALES_TAX_BASE

标签: sql-server

解决方案


case expression您可以使用多个运算符尝试以下OR操作,如下所示:

create table SampleTable (Id int, SALES_TAX_BASE Varchar(20))
insert into SampleTable Values
(1, 'NULL'),
(2, ' '),
(3, 'NULL'),
(4, '200.60'),
(5, '0'),
(6, '0.00'),
(7, NULL)

;with cte as (Select Id,
   CASE 
         WHEN ISNULL(LTRIM(RTRIM(SALES_TAX_BASE)), '00.00') = '00.00' 
         OR
           LTRIM(RTRIM(SALES_TAX_BASE)) = ''
         OR
            LTRIM(RTRIM(SALES_TAX_BASE)) = '0'
         OR
            LTRIM(RTRIM(SALES_TAX_BASE)) = 'NULL'
         THEN '00.00'
   ELSE 
         SALES_TAX_BASE 
   END AS SALES_TAX_BASE
From SampleTable
)
Select Id
, try_cast (SALES_TAX_BASE as numeric(18, 2)) as SALES_TAX_BASE
from cte

现场db<>fiddle演示。


推荐阅读