Sql-Server
REPLACE 和 CONVERT 的結果是 VARCHAR(8000) - 我怎樣才能得到 VARCHAR(50) 作為結果?
我有很多情況需要將具有許多小數位的大浮點數轉換為具有 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
現在我將進行轉換並將它們全部保存到臨時表中,然後我們將查看臨時表的結構。
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
一切都很好,效果很好,它完成了我想要的,但是,當我查看表格的結構時,我得到以下資訊:
use tempdb go sp_help '#radhe'
您可以在圖片上看到 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;