Sql server 2008 sql server中的案例条件?对于小数数据类型?

Sql server 2008 sql server中的案例条件?对于小数数据类型?,sql-server-2008,tsql,Sql Server 2008,Tsql,在Sql server中,我尝试编写一个查询,如果该值小于零,我希望以其他方式显示“

在Sql server中,我尝试编写一个查询,如果该值小于零,我希望以其他方式显示“<0”相同的值。为此,我创建了一个简单的查询,如下所示: 我知道这是给转换错误,但你能在这方面提供帮助

declare @ret decimal = 0.25    
select (case when @ret <0 then  '< 0'  else  @ret  end) as colum     
declare@ret decimal=0.25

选择(当@ret时的情况),因为您没有为
@ret
变量指定精度和比例,默认情况下比例将为
0
(请参阅:
默认比例为0
),在声明变量时只需指定比例:

DECLARE @ret DECIMAL(10,2) = 0.25 

SELECT 
     CASE 
          WHEN @ret < 0 THEN '< 0' 
          ELSE CAST(@ret AS VARCHAR)
    END
DECLARE@ret DECIMAL(10,2)=0.25
挑选
案例
当@ret<0时,则“<0”
ELSE CAST(@ret AS VARCHAR)
结束

由于您没有为
@ret
变量指定精度和刻度,默认情况下刻度将为
0
(请参阅:
默认刻度为0
),只需在声明变量时指定刻度:

DECLARE @ret DECIMAL(10,2) = 0.25 

SELECT 
     CASE 
          WHEN @ret < 0 THEN '< 0' 
          ELSE CAST(@ret AS VARCHAR)
    END
DECLARE@ret DECIMAL(10,2)=0.25
挑选
案例
当@ret<0时,则“<0”
ELSE CAST(@ret AS VARCHAR)
结束

试试这个,注意小数点的精度修饰符

declare @ret decimal(10,5) =0.25
select case when @ret < 0 THEN '< 0'  ELSE cast(@ret as varchar) end as colum
declare@ret decimal(10,5)=0.25
当@ret<0时选择case,然后选择'<0'否则强制转换(@ret作为varchar)结束为column

试试这个,注意小数点的精度修饰符

declare @ret decimal(10,5) =0.25
select case when @ret < 0 THEN '< 0'  ELSE cast(@ret as varchar) end as colum
declare@ret decimal(10,5)=0.25
当@ret<0时选择case,然后选择'<0'否则强制转换(@ret作为varchar)结束为column

TSQL
中使用
案例时的基本示例:

declare @iDec decimal(10,5) = 10.5
SELECT   ProductNumber, 
      Category =
      CASE ProductLine
         WHEN @iDec > 1 THEN 'Greater Than 1'
         WHEN @iDec < 1 THEN 'Less Than 1'
         ELSE 'Equal to 1'
      END,
      Name
FROM Production.Product
ORDER BY ProductNumber;
declare@iDec decimal(10,5)=10.5
选择ProductNumber,
类别=
案例生产线
当@iDec>1时,则“大于1”
当@iDec<1时,则“小于1”
否则“等于1”
完,,
名称
从生产。产品
按产品编号订购;

TSQL
中使用
案例时的基本示例:

declare @iDec decimal(10,5) = 10.5
SELECT   ProductNumber, 
      Category =
      CASE ProductLine
         WHEN @iDec > 1 THEN 'Greater Than 1'
         WHEN @iDec < 1 THEN 'Less Than 1'
         ELSE 'Equal to 1'
      END,
      Name
FROM Production.Product
ORDER BY ProductNumber;
declare@iDec decimal(10,5)=10.5
选择ProductNumber,
类别=
案例生产线
当@iDec>1时,则“大于1”
当@iDec<1时,则“小于1”
否则“等于1”
完,,
名称
从生产。产品
按产品编号订购;

Yes,因为它>0,请使用-0.25尝试此操作,或将类型更改为十进制(10,2)作为一个选项,我更改了我的查询,请检查它,实际上在准备问题时我打错了请查找我的EDID问题可能OP的意思是说他们在发布评论时已经更改了问题。无论哪种方式,这似乎以其当前形式回答了问题。是的,因为它>0,请尝试此操作s为-0.25,或将类型更改为十进制(10,2)作为一个选项,对不起,我更改了我的查询,请检查它,实际上在准备问题时,我打错了,请查找我的EDID问题。也许OP的意思是说他们在发布评论时已经更改了问题。无论哪种方式,这似乎以其当前形式回答了问题。SELECT@ret将显示
0
同样,这不是您所问的大小写运算符的问题。您的大小写根据情况返回不同的类型。数字优先于字符串(在SQL Server中),因此引擎将尝试将
“<0”
转换为一个数字并失败。SELECT@ret也将显示
0
,这不是您所问的CASE运算符的问题。您的案例根据情况返回不同的类型。数字优先于字符串(在SQL Server中),因此引擎将尝试将
“<0”
转换为一个数字并失败。