2013-07-31 30 views
0

我知道这是不好的做法,但由于数据迁移列的要求,我可以做到这一点。演员/转换文本十进制

我期待在文本表达式中对我的值进行取整(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 - 开发版

回答

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 
+0

哦,我同意这一点,2个新的列,并离开文本列独自一人,似乎你有一个不必要的转换为varchar(10) –

+0

@ t-clausen.dk,你是对的,我正在尝试其他东西,忘记删除额外的演员。 – HLGEM

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 '%.%' 
+0

Msg 529,Level 16,State 2,Line 1 不允许将数据类型十进制显式转换为文本。 – LmC

+0

@LmC它已被更正 –

+0

您能提供示例为地板和小屋 – LmC