仅当数字后面不为零时才显示带小数位的数字
Show numbers with decimal places only when they are not followed in zero
Table:
DECLARE @tab TABLE (p1 decimal(9,2), p2 decimal(9,2))
INSERT INTO @tab VALUES (10.5,9),(2,4),(10.5,9.5),(40,90),(10,9.56)
查询:
select IIF(FLOOR(p1) <> CEILING(p1) OR FLOOR(p2) <> CEILING(p2),CAST(p1 AS VARCHAR)+'-'+CAST(p2 AS VARCHAR), CAST( CAST(p1 AS int) as varchar)+'-'+cast( CAST(p2 AS int) as varchar)) AS Data from @tab
输出:
我只想在十进制值不为零或大于零的情况下以十进制显示。我的第一个数据 10.5 和 9,我想显示为 10.50-9,但显示为 10.50-9.00。
到目前为止,您在两列的组合上有一个条件 (IIF
)。您需要单独的条件:
select
case when floor(p1) <> ceiling(p1) then
cast(p1 as varchar)
else
cast(cast(p1 as int) as varchar)
end +
'-' +
case when floor(p2) <> ceiling(p2) then
cast(p2 as varchar)
else
cast(cast(p2 as int) as varchar)
end as data
from @tab;
(我在这里用标准 SQL 的 CASE WHEN
替换了 TSQL 的专有 IIF
,但您也可以使用 IIF
当然。)
更常见的是,您会使用 STR
将数字显式转换为具有所需小数位数的字符串:
case when floor(p1) <> ceiling(p1) then
str(p1, 10, 2)
else
str(p1, 10, 0)
end
STR ( float_expression [ , 长度 [ , 十进制 ] ] )
您应该在连接它们之前按列处理格式。使用您给定的代码,我将其修改为
DECLARE @tab TABLE (p1 decimal(9,2), p2 decimal(9,2))
INSERT INTO @tab VALUES (10.5,9),(2,4),(10.5,9.5),(40,90),(10,9.56)
SELECT IIF(FLOOR(p1)<> CEILING(p1),CAST(p1 AS VARCHAR),CAST( CAST(p1 AS int) as varchar)) +'-'+
IIF(FLOOR(p2)<> CEILING(p2),CAST(p2 AS VARCHAR),CAST( CAST(p2 AS int) as varchar)) as Data1 FROM @tab;
Table:
DECLARE @tab TABLE (p1 decimal(9,2), p2 decimal(9,2))
INSERT INTO @tab VALUES (10.5,9),(2,4),(10.5,9.5),(40,90),(10,9.56)
查询:
select IIF(FLOOR(p1) <> CEILING(p1) OR FLOOR(p2) <> CEILING(p2),CAST(p1 AS VARCHAR)+'-'+CAST(p2 AS VARCHAR), CAST( CAST(p1 AS int) as varchar)+'-'+cast( CAST(p2 AS int) as varchar)) AS Data from @tab
输出:
我只想在十进制值不为零或大于零的情况下以十进制显示。我的第一个数据 10.5 和 9,我想显示为 10.50-9,但显示为 10.50-9.00。
到目前为止,您在两列的组合上有一个条件 (IIF
)。您需要单独的条件:
select
case when floor(p1) <> ceiling(p1) then
cast(p1 as varchar)
else
cast(cast(p1 as int) as varchar)
end +
'-' +
case when floor(p2) <> ceiling(p2) then
cast(p2 as varchar)
else
cast(cast(p2 as int) as varchar)
end as data
from @tab;
(我在这里用标准 SQL 的 CASE WHEN
替换了 TSQL 的专有 IIF
,但您也可以使用 IIF
当然。)
更常见的是,您会使用 STR
将数字显式转换为具有所需小数位数的字符串:
case when floor(p1) <> ceiling(p1) then
str(p1, 10, 2)
else
str(p1, 10, 0)
end
STR ( float_expression [ , 长度 [ , 十进制 ] ] )
您应该在连接它们之前按列处理格式。使用您给定的代码,我将其修改为
DECLARE @tab TABLE (p1 decimal(9,2), p2 decimal(9,2))
INSERT INTO @tab VALUES (10.5,9),(2,4),(10.5,9.5),(40,90),(10,9.56)
SELECT IIF(FLOOR(p1)<> CEILING(p1),CAST(p1 AS VARCHAR),CAST( CAST(p1 AS int) as varchar)) +'-'+
IIF(FLOOR(p2)<> CEILING(p2),CAST(p2 AS VARCHAR),CAST( CAST(p2 AS int) as varchar)) as Data1 FROM @tab;