我试图将带小数点的字符串转换为NUMERIC。进行转换时,我将整数值舍入。我不想获取该整数作为舍入值。
情况1: 例如:
DECLARE @val varchar(10);
SET @val = 454.6;
SELECT (CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1 THEN
CAST( CAST( @val AS VARCHAR(MAX) ) AS NUMERIC ) ELSE NULL END)
如果运行此命令,我将得到的值作为 455 的四舍五入整数。
但是我需要通过避免舍入整数来作为 454 值。
案例2 :
如果我将此值从字符串转换为整数,则会遇到如下问题:
错误:SQLSTATE [22018]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]将varchar值'454.6'转换为数据类型int时转换失败。
请让我知道是否有人对此有想法,
答案 0 :(得分:1)
您可以使用FLOOR函数将Decimal的整数部分捕获为:
DECLARE @val varchar(10);
SET @val = 454.6;
SELECT
CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1
THEN FLOOR(CAST( CAST( @val AS VARCHAR(MAX) ) AS DECIMAL(18, 3) ) )
ELSE NULL END
或者...用这种方法是一样的,而且更加紧凑:
DECLARE @val varchar(10) = '454.6';
SELECT
CASE WHEN ISNUMERIC( CAST( @val AS VARCHAR(MAX) ) ) = 1
THEN FLOOR(CAST(@val AS DECIMAL(18, 3) ) )
ELSE NULL END
答案 1 :(得分:0)
尝试一下:
DECLARE @val varchar(10);
SET @val = 454.6;
select Cast([decimal] as int) from
(select convert(decimal(10,4), @val) as decimal) as a