转换/转换文本 - 十进制

时间:2013-07-31 12:42:42

标签: sql tsql sql-server-2005 type-conversion

我知道这是不好的做法,但由于数据迁移列的要求,这是我能做到的唯一方法。

我希望在文本域中向上舍入(CEIL)或向下舍入(FLOOR)我的值。

我知道他们都是整数或小数,所以不用担心那里的数据不好。

UPDATE [dbo].[T01]
SET [2 37] =    CAST(
             FLOOR(CONVERT(decimal(10,5),(CAST([2 37] AS varchar(10)))))
             AS text )
WHERE [2 37] LIKE '%.%'

我的第一次尝试是:

UPDATE [dbo].[Tomcat 19032013 01]
SET [2 37] = FLOOR([2 37])
WHERE [2 37] LIKE '%.%'

长话短说我希望能够在我的文本字段中填写或细化该数据!

我正在使用SQL 2005 - Developer Edition

2 个答案:

答案 0 :(得分:2)

我假设您要将值四舍五入为最接近的整数

向下舍入

UPDATE [dbo].[T01]
SET [2 37] =
CAST(CAST(FLOOR(CONVERT(decimal(10,5),(CAST([2 37] AS varchar(10))))) as VARCHAR(10))
AS text )
WHERE [2 37] LIKE '%.%'

四舍五入

UPDATE [dbo].[T01]
SET [2 37] =    CAST(
CAST(CEILING(
CONVERT(decimal(10,5),(CAST([2 37] AS varchar(10))))) as VARCHAR(10))
AS text )
WHERE [2 37] LIKE '%.%'

答案 1 :(得分:2)

您应该添加列以进行转换。

DECLARE @T01 TABLE([2 37] text, [2 37 Floor] int, [2 37 Ceiling] int)
INSERT @T01 ([2 37]) VALUES('1.5')
INSERT @T01 ([2 37]) VALUES('4.1')
INSERT @T01 ([2 37]) VALUES('5.9')

update t
set [2 37 Floor]=floor(CONVERT(decimal(8,2),(CAST([2 37] AS varchar(10))))  )
,  [2 37 Ceiling] =ceiling(CONVERT(decimal(8,2),(CAST([2 37] AS varchar(10)))))
from @T01 t
WHERE [2 37] LIKE '%.%'
select * from @T01