Mar*_*lli 0 sql-server varchar type-conversion floating-point sql-server-2014
我有很多情况需要将带有许多小数位的大浮点数转换为带有 2、1 或根本没有小数位的四舍五入数字。
我一直在这样做的方式如下所示:
declare @t table ( [rows] float )
insert into @t
select 1.344
union all select 32.3577
union all select 65.345
union all select 12.568
union all select 12.4333
select * from @t
Run Code Online (Sandbox Code Playgroud)
现在我将进行转换并将它们全部保存到临时表中,然后我们将查看临时表的结构。
begin try
drop table #radhe
end try
begin catch
end catch
select
[Rows Formated] = REPLACE(CONVERT(VARCHAR(50),CAST(sp.[Rows] AS MONEY),1), '.00','')
into #radhe
from @t sp
select *
from #radhe
Run Code Online (Sandbox Code Playgroud)
一切都很好,效果很好,它做了我想要的,但是,当我查看表的结构时,我得到以下信息:
use tempdb
go
sp_help '#radhe'
Run Code Online (Sandbox Code Playgroud)
您可以在图片上看到 varchar(8000)。我们可以避免吗?
我会很高兴使用 varchar(50)
从文档开始REPLACE()
:
如果 string_expression 不是varchar(max)或nvarchar(max) 类型,
REPLACE
则将返回值截断为 8,000 字节。要返回大于 8,000 字节的值,必须将string_expression显式转换为大值数据类型。
这对我来说意味着它总是varchar(8000)
或者nvarchar(4000)
当输入不是最大类型时。因此,尝试执行附加CONVERT
后的REPLACE
:
SELECT
[Rows Formated] = CONVERT(varchar(50),REPLACE(CONVERT(varchar(50),
CAST(sp.[Rows] AS MONEY),1), '.00',''))
INTO #radhe
FROM @t AS sp;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3850 次 |
最近记录: |