我在表格中有一列数量,其类型为十进制(16,6)
我想从该表中创建一个
的SELECT查询我试过了:
SELECT
CASE WHEN (Quantity-CAST(Quantity AS int )=0) THEN CAST(Quantity AS int)
ELSE CAST(Quantity AS decimal(16,2)) END
FROM Table
但它返回的值如1.00
有可能吗?我现在想知道我是否真的试图将两种数据类型放入单列中?它以某种方式工作,但可能不是我希望的。
如果重要,我正在使用Microsoft SQL Server
答案 0 :(得分:1)
您正在将数字与其外部代表混合在一起。数字1.23可以显示为1.23或1.230或1.2300000。此处的数字始终相同,但您显示的字符串不同。
所以你需要做的是从你的号码创建一个所需格式的字符串。执行此操作的功能是FORMAT(数字,数字)。
select
case
when quantity = round(quantity,0,1) then format(quantity,'0')
else format(quantity,'0.00')
end
from mytable;
SQL小提琴:http://sqlfiddle.com/#!6/cdc85/1。
Darn it,你是对的SQL Server 2005中不存在FORMAT,所以你需要一个技巧。根据您是想要两位还是零位转换为int或货币,然后在任何情况下转换为varchar,因此两个表达式都会产生相同的数据类型。
select
case
when quantity = round(quantity,0,1) then convert(varchar, cast(quantity as int), 1)
else convert(varchar, cast(quantity as money), 1)
end
from mytable;
答案 1 :(得分:0)
检查以下示例
declare @val as decimal(16,6)
set @val = 10.23
select convert(float,ROUND(@val,2))
--OUTPUT: 10.23
set @val = 10
select convert(float,ROUND(@val,2))
--OUTPUT: 10
set @val = 10.12345
select convert(float,ROUND(@val,2))
--OUTPUT: 10.12
此处的问题是,如果有10.10000
之类的值,则会显示为10.1
您可以做的另一件事就是建议您将其保留为SQL,并根据需要在View中对其进行格式化。