选择小数位数超过4的数字

时间:2015-09-08 16:16:17

标签: sql sql-server sql-server-2008

我有一个SQL表,其中一个浮点列填充了以下值:

  1.4313
  3.35
  2.55467
  6.22456
  3.325

我需要选择仅包含超过4位小数的值的行。在这种情况下,select必须返回:

2.55467
6.22456

想法?谢谢!

这是我到目前为止所尝试的

select * 
from table 
where CAST(LATITUDE AS DECIMAL(10,5)) - LATITUDE = 0

13 个答案:

答案 0 :(得分:16)

$/myProject/myFolder

答案 1 :(得分:7)

为什么我们不能通过这个查询简化: -

SELECT * FROM table WHERE val LIKE '%.____%'

这会选择我们想要的内容

答案 2 :(得分:3)

http://sqlfiddle.com/#!3/abadc/3/0

似乎这样的事情应该有用......

所有这一切都是将数字转换为一个整数,以便在将* 10乘以你需要的十进制数之后将小数字丢弃,然后将数字的int版本与基数相比较,之后它也乘以10到小数的力量。

如果数字不匹配,则您的小数位数超过4.如果匹配,则为4或更少。

Select *
      from foo
      where cast(myNum*power(10,4) as int) <> myNum*power(10,4)

答案 3 :(得分:2)

请尝试类似:

select * from table
where RIGHT(CAST(value as DECIMAL(10,5)), value), 1) != 0

答案 4 :(得分:2)

鉴于答案对MaxDb不起作用,但确实如此:

where FLOOR(value * 10000) != value * 10000

Source

减少/增加0,以获得更低/更高的精确度。

答案 5 :(得分:2)

{{1}}

答案 6 :(得分:1)

另一种解决方案:

public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {   
                      ... //your functionality    
                            if(compoundButton.isPressed()){
                                notifyDataSetChanged();
                            }
                        }  });

答案 7 :(得分:0)

您可以将其与10000相乘,然后将原始数字替换为.替换''

Fiddle

select * from tablename
where replace(numcolumn,'.','') - numcolumn * 10000 > 0

答案 8 :(得分:0)

下面是检查4个小数位精度的代码:

  1. MyNum替换为您要检查精度的列
  2. 使用您正在使用的表格替换MyTbl
  3. 以您要检查的精确度
  4. 替换4

    SQL:

    SELECT  MyNum
          , LEN(CAST (MyNum AS CHAR))
          , -------1. length of decimal number, after conversion to CHAR
            CHARINDEX('.', CAST (MyNum AS CHAR))
          , ---2.length of numbers after the '.'
            LEN(CAST (MyNum AS CHAR)) - CHARINDEX('.', CAST (MyNum AS CHAR))  -----subtracting 1-2, to get the length of numbers after decimal point '.'
    FROM    MyTbl
    WHERE   LEN(CAST(MyNum AS CHAR)) - CHARINDEX('.', CAST(MyNum AS CHAR)) > 4; --checking if there are more than 4 numbers after the decimal point '.'
    

答案 9 :(得分:0)

这是一个较旧的问题,但它可以结帐。

select val
from table
where ((val * 100) % 1) > 0

将精度更改为100。

答案 10 :(得分:0)

  1. 将数字设置为文本
  2. 使用“。”分隔文本作为分隔符
  3. 使用第二个索引并应用一个长度
  4. 过滤器
--i.e. with postgreSQL.
--1)
select data_numeric, length(arr[2]) as str_length
from (
  select data_numeric, regexp_split_to_array(data_numeric::text, '\.') as arr from TABLE
) temp;

--2)
with t1 as (
  select data_numeric, regexp_split_to_array(data_numeric::text, '\.') as arr from TABLE
), t2 as (
  select data_numeric, arr[2] as decimals, length(arr[2]) as length from t1
)
select * from t2;

答案 11 :(得分:0)

这适用于Postgres 11:

SELECT * FROM mytable WHERE mycolumn != ROUND(mycolumn::numeric,2)

答案 12 :(得分:0)

选择小数点后2位以上的数字:

我有一个示例,其中float类型列中的值“ 2.32”的#limitedText{ padding:3px 0px 0px 29px; display: inline-block; text-align: left; letter-spacing: 0px; color: #7B7B7B; opacity: 1; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } ((abs(val)*100)返回了两个不同的值。

CONVERT(INT,(abs(val)*100))

在与0比较的情况下,这导致选择查询答案错误。 我认为(abs(2.32)*100) = 232 CONVERT(INT,(abs(2.32)*100)) = 231 以这样的方式处理整数,对于某些浮点数情况,发布的解决方案将不起作用。

这是我在两个小数点后的位置所做的操作:

MSSQL CONVERT()