Sql 将变量作为参数传递给varchar()作为强制转换(column1作为varchar(@variable))

Sql 将变量作为参数传递给varchar()作为强制转换(column1作为varchar(@variable)),sql,sql-server,variables,parameters,casting,Sql,Sql Server,Variables,Parameters,Casting,使用SQL Server 2014。作为一项挑战,有人让我在select语句中将113.05作为0.05返回 我提出以下意见: declare @temp1 table (value1 numeric(5,2)) insert into @temp1 (value1) values (113.05); select value1, cast('.' + right(cast(value1 as varchar(6)), 2) as numeric(3,2)) from @temp1; 这是可

使用SQL Server 2014。作为一项挑战,有人让我在select语句中将113.05作为0.05返回

我提出以下意见:

declare @temp1 table (value1 numeric(5,2))
insert into @temp1 (value1)
values
(113.05);

select value1, cast('.' + right(cast(value1 as varchar(6)), 2) as numeric(3,2))
from @temp1;
这是可行的,但我想如果value1中有多行,并且所有行的长度都不同于6,该怎么办。如何将value1的长度作为参数传入cast(value1作为varchar(value1的长度)


我尝试声明一个变量@length并将其设置为等于len(value1),然后将其作为varchar(@length)传递,但这不起作用。谢谢您的帮助。

我根本不会这样做。使用数学,特别是模

declare @temp1 table (value1 numeric(5,2))
insert into @temp1 (value1)
values
(113.05)
, (911.123)
, (1.22)
, (.3)

select value1
    , UsingMath = value1 % 1
from @temp1;

如果只是查找小数点后的值,则可以强制转换为varchar,然后获取小数点的charIndex。然后基于该索引+1将子字符串返回到强制转换值的长度。