【问题标题】:SQL Server: Calculate length before decimal placesSQL Server:计算小数位前的长度
【发布时间】:2015-11-14 00:54:24
【问题描述】:

我想计算数值列中值的长度。这些值是随机的

255.0125 , 28847.0125 etc

我只需要小数位前的值的长度。到目前为止,第一个值应该是 3,第二个值应该是 5。

什么 SQL 函数在这里会有所帮助。

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    我建议使用FLOOR函数,如果数字可以是负数,也添加ABS:

    SELECT LEN(FLOOR(9.99999))
    SELECT LEN(FLOOR(ABS(-9.99999)))
    

    这会失败

    SELECT LEN(cast(-9.99999 as int))--Result 2
    SELECT LEN(FLOOR(-9.99999))--Result 3
    

    【讨论】:

    • SELECT LEN(FLOOR(9.99999)) 非常适合我。感谢@Deepanshu 的快速帮助
    【解决方案2】:

    试试:

    select len(cast(999999999.99999 as int))
    
    select len(cast(28847.0125 as int))
    

    或者

    select len(cast('28847.0125' as decimal))
    

    或者

    select len(round('28847.0125', 0, 1))
    

    或者

    编辑 2 deepanshu-kalra的建议

    SELECT LEN(FLOOR(9.99999))
    

    【讨论】:

    • 地板也可以使用。 SELECT LEN(FLOOR(9.99999))。我会更喜欢这个。
    • 是的,是的。我将其添加到我的答案中。 @DeepanshuKalra
    【解决方案3】:

    使用 ROUND() 函数,将十进制转换为 int,然后使用 LEN()

    查询将是

    select LEN(ROUND('255.0125', 0))
    

    ROUND() 函数语法:

    ROUND(value,decimalPlace)
    

    【讨论】:

    • 这将失败SELECT LEN(ROUND('9.99999', 0))
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多