Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server mssql显示1个小数点(如果可用),否则显示无_Sql Server_Decimal Point - Fatal编程技术网

Sql server mssql显示1个小数点(如果可用),否则显示无

Sql server mssql显示1个小数点(如果可用),否则显示无,sql-server,decimal-point,Sql Server,Decimal Point,我想这很简单 我有一个显示项目长度的查询 查询: select length from vw_OutstandingVsInStock1 OVI LEFT JOIN Departments DEP on OVI.Department COLLATE DATABASE_DEFAULT=DEP.Description where OutstandingVolume>0.39 这将返回如下结果: 0.9 1.2 1.5 1.8 2.1 2.4 2.7 3.0 3.3 3.6... 在3.0

我想这很简单

我有一个显示项目长度的查询

查询:

select length from vw_OutstandingVsInStock1 OVI
LEFT JOIN Departments DEP
on OVI.Department COLLATE DATABASE_DEFAULT=DEP.Description
where OutstandingVolume>0.39 
这将返回如下结果:

0.9
1.2
1.5
1.8
2.1
2.4
2.7
3.0
3.3
3.6...
3.0
的情况下,我希望它显示为
3

因此,如果没有十进制值,则显示不带小数的
int
。如果存在小数点,是否显示小数点到1个小数点

因此,期望的输出是
3
6
,而不是
3.0
6.0


我正在使用MSSQL 2012。

目前想不出比这更干净的了。我已将文字值放置在CTE中,您可以将现有查询放置在CTE中:

;With rowss(length) as (
select 0.9 union all select 1.2 union all select 1.5 union all select
       1.8 union all select 2.1 union all select 2.4 union all select
       2.7 union all select 3.0 union all select 3.3 union all select
       3.6
)
select
    STUFF(stLength,CHARINDEX('.',stLength),
        CASE WHEN stLength like '%.0' THEN 2 ELSE 0 END,'')
from
    (select CONVERT(varchar(10),length) as stLength from rowss) t
诀窍是使用
STUFF
,并根据字符串的结尾决定删除2个字符或不执行任何操作

结果:

0.9
1.2
1.5
1.8
2.1
2.4
2.7
3
3.3
3.6
另一个变体()


我认为这是可行的:

SELECT 
  CASE WHEN RIGHT(length,1) = 0 THEN STUFF(length, LEN(length)-1, 2, '') 
  ELSE STUFF(length, LEN(length), 0, '') 
  END
我假设长度具有数据类型numeric(?,1)。

为什么不

select cast(length as float) from vw_OutstandingVsInStock1 OVI
...

它解决了您的问题吗?

服务器没有显示任何内容-它只返回二进制8字节
double
aka
long float
值。它是另一个将这个数字呈现在屏幕或纸张上的程序。你没有告诉我的程序是什么……嗨,我在ManagementStudio 2012中使用mssql查询窗口?“长度来自”字段来自视图。谢谢。四舍五入怎么样?您是只想得到一个小数位数而忽略其余的小数位数,还是希望小数位数在需要时向上或向下取整?或者小数位数不能超过一位吗?谢谢,不能超过一位,所以不能四舍五入。我要一个数字来显示它,否则只显示整数。thanks@sajjan用case表达式替换iif。其余的都是一样的。
select cast(length as float) from vw_OutstandingVsInStock1 OVI
...