【发布时间】:2021-01-08 10:12:30
【问题描述】:
create table #Temp
(
id int,
Volume decimal(18,3)
)
insert into #Temp(id,Volume)values(1,10)
insert into #Temp(id,Volume)values(2,10.2)
id Volume
-----------------
1 10.000
2 10.200
Declare @Type as int
set @Type=1
select Id,Convert(varchar(10),CASE WHEN @Type=1 THEN CAST(Volume AS INT)
ELSE Volume END) AS Quantity from #Temp
它正在显示这样的结果
id Volume
-----------------
1 10.000
2 10.000
但是当类型为 1 时我想要这样的结果,那么结果应该是整数格式:
id Volume
-----------------
1 10
2 10
在其他条件下(@Type 而不是 1)我想要这样的结果
id Volume
-----------------
1 10.000
2 10.200
我试过这个查询
select Id,Convert(varchar(10),CASE WHEN @Type=1 THEN CAST(Volume AS INT)
ELSE Volume END) AS Quantity from #Temp
【问题讨论】:
-
您需要编写两个单独的查询,并将它们放在
IF后面。 T-SQL 仅允许其列使用静态类型,因此您不能在查询中有条件地切换类型。 -
@Panagiotis Kanavos 它不工作,先生......
-
什么不起作用?坦率地说,为什么要在服务器上这样做呢?当你返回一个整数时,你实际上是在四舍五入。那么为什么不四舍五入仍然返回小数呢?
-
这听起来应该是使用表现层来控制显示格式,而不是SQL Server动态改变列的数据类型。
-
旁注:SQL Server 已经支持一年多了,您应该尽快查看升级路径。
标签: sql sql-server sql-server-2008