【问题标题】:Cast/Convert Text-Decimal转换/转换文本十进制
【发布时间】:2013-07-31 12:42:42
【问题描述】:

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

我希望在文本字段中向上取整 (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 - 开发人员版

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

    • 哦,我非常同意这一点,2 个新列,不理会 TEXT 列,看来您对 varchar(10) 进行了不必要的转换
    • @t-clausen.dk,你说得对,我最初是在尝试别的东西,却忘了去掉多余的演员表。
    【解决方案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 '%.%'
    

    【讨论】:

    • Msg 529, Level 16, State 2, Line 1 不允许从十进制数据类型显式转换为文本。
    • 你能提供地板和天花板的例子吗
    • @Lmc 示例包括
    • 我没有看到地板或天花板被使用过,这是需要的
    • @LmC 它正在四舍五入到最接近的整数,这就是我认为你需要的。这不是你需要的结果吗?
    猜你喜欢
    • 2018-01-12
    • 2019-01-11
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多