2015-11-09 241 views
2

我在PostgreSQL与这些值的数字列:如何检查数值字段中的值是否是整数?

1.0 
3.5 
1.5 
4.0 

我想编写一个查询,这将给我不是整数的所有行。 含义我想:

3.5 
1.5 

我该怎么办呢?

+5

其中numcol <>投(numcol为INT) – jarlh

+0

要知道,你只能依靠精确的数据类型的整数检查如DECIMAL。使用像REAL这样的近似数据类型,你不能(或者至少你必须定义一个容差)。 –

回答

2

可以使用模师:

CREATE TABLE tab(col DECIMAL(10,2)); 

INSERT INTO tab(col) 
VALUES (1.0),(3.5),(1.5),(4.0); 

SELECT * 
FROM tab 
WHERE col % 1 <> 0; 

LiveDemo

Remainder

在数学中,余数是 “遗留” 量 后执行一些计算。

例如:

10 % 4 = 2  because (FLOOR(10/4) = 2, 2 * 4 + 2 = 10) 
13 % 4 = 1  because (FLOOR(13/4) = 3, 3 * 4 + 1 = 13) 
3.5 % 1 = 0.5 because (FLOOR(3.5/1) = 3, 3 * 1 + 0.5 = 3.5) 
4.0 % 1 = 0  because (FLOOR(4.0/1) = 4, 4 * 1 + 0 = 4) 

所以,如果号码有东西比小数点后零否则你知道这是不是整数。

另外,您可以使用:

SELECT * 
FROM tab 
WHERE col <> FLOOR(col); 

LiveDemo2

+0

你能解释一下哪里? – avi

+0

@avi查看已更新 – lad2025