Sql 选择小数点后4位以上的数字

Sql 选择小数点后4位以上的数字,sql,sql-server,sql-server-2008,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 您可以将其乘以10000,然后从原始数字中减去。有 请尝试以下

我有一个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
您可以将其乘以10000,然后从原始数字中减去。有


请尝试以下方式:

select * from table
where RIGHT(CAST(value as DECIMAL(10,5)), value), 1) != 0
看起来这样的事情应该行得通

它所做的只是将数字转换为整数,在乘以它*10到所需的小数的幂之后,它会将整数版本与基数进行比较,然后再乘以10到小数的幂

如果数字不匹配,则小数位数超过4。如果他们真的匹配,那么是4个或更少

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

下面是将检查小数点后4位精度的代码:

DECLARE @tbl TABLE (val float)
INSERT INTO @tbl SELECT 2.32
INSERT INTO @tbl SELECT 1234.54
INSERT INTO @tbl SELECT 1234.545
INSERT INTO @tbl SELECT 1234.5456
INSERT INTO @tbl SELECT 1234.54567

select * from @tbl where abs(val-round((val),2)) > 0.001
将MyNum替换为要检查精度的列 将MyTbl替换为您正在使用的表 替换4,无论您检查的精度如何 Sql:


对于MaxDb,给定的答案不适用于我,但它确实:

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

减少/增加0’s以降低/提高精度。

为什么我们不能通过此查询使其变得简单:-

SELECT *
FROM table WHERE
(abs(val)*100000)%10 <> 0
SELECT * FROM table WHERE val LIKE '%.____%'

这选择了我们想要的

这是一个较老的问题,但它检查出来了

select val
from table
where ((val * 100) % 1) > 0
将100更改为您的精度。

另一种解决方案还包括:

SELECT *
FROM table WHERE
(abs(val)*100000)%10 <> 0
SELECT * from table
where (round(value,2) - round(value,4) <> 0)
将数字转换为文本 使用“.”作为分隔符拆分文本 使用第二个索引并应用长度 滤器 -i、 e.使用postgreSQL。 -1 选择数据\u数值、长度或[2]作为str\u长度 从…起 从表中选择数据\u numeric,regexp\u split\u to \u arraydata\u numeric::text,'\.'作为arr 临时雇员 -2 以t1为例 从表中选择数据\u numeric,regexp\u split\u to \u arraydata\u numeric::text,'\.'作为arr ,t2as 选择数据_numeric,arr[2]作为小数,lengtharr[2]作为t1的长度 从t2中选择*;
这适用于Postgres 11:

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

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

DECLARE @tbl TABLE (val float)
INSERT INTO @tbl SELECT 2.32
INSERT INTO @tbl SELECT 1234.54
INSERT INTO @tbl SELECT 1234.545
INSERT INTO @tbl SELECT 1234.5456
INSERT INTO @tbl SELECT 1234.54567

select * from @tbl where abs(val-round((val),2)) > 0.001
我有一个例子,其中浮点型列中值2.32的absval*100和CONVERTINT,absval*100返回两个不同的值

(abs(2.32)*100) = 232

CONVERT(INT,(abs(2.32)*100)) = 231
这导致在与0进行比较时选择错误的查询答案。 我假设MSSQL以这样的方式转换函数舍入数,对于某些浮点数的情况,发布的解决方案将不起作用

下面是我如何在小数点后2位以上完成的:

DECLARE @tbl TABLE (val float)
INSERT INTO @tbl SELECT 2.32
INSERT INTO @tbl SELECT 1234.54
INSERT INTO @tbl SELECT 1234.545
INSERT INTO @tbl SELECT 1234.5456
INSERT INTO @tbl SELECT 1234.54567

select * from @tbl where abs(val-round((val),2)) > 0.001


@Kaf我试着从表中选择*,其中CASTLATITUDE为小数10,5-LATITUDE=0,但我正在寻找替代方案。令人惊讶的是,关于这个选择的信息并不多。使用charindex和right/substring函数获取小数部分,然后检查字符串的长度>4Doesn是否正常工作。返回3位小数的行:请尝试修改的版本。我尝试了您的新版本。看起来有效,但神秘地返回更少的行!“返回的行数更少是什么意思?”威震天选择返回2080行,您选择的984行是help@BernieSF&威震天如果值为3,则它将不起作用。356009@MegaTron只需一个注意事项:以这种形式为我工作:RIGHTCONVERTDECIMAL10,5,MyColumn,1!=0I运行此答案时出错。答案在哪里clause@AnupAgrawal是的。如果数字以“9”结尾,则不符合条件,并且在results.Ghost中忽略了它。您的选择看起来也有效,但会返回一些额外的行。威震天的选择返回2080行,您的选择2186。现在我正在检查哪一个是正确的。经过深入的复习,我发现你的答案是正确的。这是唯一返回正确值的select语句。但是,为什么这里需要ABS函数呢?val*10000-CONVERTINT,val*10000 0适用于me@CMS你说得对。我可能是从长度比较开始的,并意识到负面因素会导致额外的字符;ABS可能是那次尝试的结果。这个答案与戈特的答案相同。从性能上看,这一选择似乎更快一些。对于sql技能较低的ppl来说,纯代码的答案不好——请详细说明你做了什么,它是如何工作的,以及它为什么解决了这个问题;鉴于我答案中的示例数据,此解决方案不起作用。在Oracle上对我有效。Oracle上的另一种方法是:从表where value!=四舍五入值,4;