SQL 获取所有小数点后3位以上的数字
SQL to get all number that have more than 3 digits after the decimal point
我想得到所有小数点后超过 3 位的数字。
例如,我有一个名为 ARTICLE
的 table,它有两列:name
(varchar
类型)和 price
(number
).
我想获取存储在 table ARTICLE
中的所有记录,其中 price
列值的小数点后有超过 3 个数字。
例如,ARTICLE.price
等于 12.9584 或 45.874521 的值将被返回,因为它们的小数点后有 3 个以上的数字。
请问我怎样才能做到这一点?
我尝试了这个请求,但它不正确:
select name, price
from ARTICLE
where length(TO_CHAR(price)) > 7;
谢谢
您只能对数字进行操作:
where trunc(price * 1000) - price * 1000 <> 0
我没有 table 来测试这个,但你可以使用:
Select Name, Price
From Article
Where Price like '%#.###%'
也就是说,小数点前至少要有1个数字,小数点后至少要有3个数字。有关以下通配符的更多信息:
https://www.w3schools.com/sql/sql_wildcards.asp
希望这对您有所帮助!
与@Krzysztof 的解决方案类似:
CREATE TABLE article (name VARCHAR2(10), price NUMBER);
INSERT INTO article VALUES ('a', 12.9584);
INSERT INTO article VALUES ('b', 45.874521);
INSERT INTO article VALUES ('c', 0.123);
SELECT * FROM article WHERE ABS(price - TRUNC(price,3)) > 0;
NAME PRICE
a 12,9584
b 45,874521
使用 ROUND
函数 - 您正在寻找 不等于三位数舍入值的数字。
例子——你测试数据
select round(2/3,rownum) price from dual connect by level <= 5
PRICE
----------
,7
,67
,667
,6667
,66667
查询小数点后3位以上的数字
with dt as (
select round(2/3,rownum) price from dual connect by level <= 5
)
select price from dt
where price != round(price,3)
PRICE
----------
,6667
,66667
我想得到所有小数点后超过 3 位的数字。
例如,我有一个名为 ARTICLE
的 table,它有两列:name
(varchar
类型)和 price
(number
).
我想获取存储在 table ARTICLE
中的所有记录,其中 price
列值的小数点后有超过 3 个数字。
例如,ARTICLE.price
等于 12.9584 或 45.874521 的值将被返回,因为它们的小数点后有 3 个以上的数字。
请问我怎样才能做到这一点?
我尝试了这个请求,但它不正确:
select name, price
from ARTICLE
where length(TO_CHAR(price)) > 7;
谢谢
您只能对数字进行操作:
where trunc(price * 1000) - price * 1000 <> 0
我没有 table 来测试这个,但你可以使用:
Select Name, Price
From Article
Where Price like '%#.###%'
也就是说,小数点前至少要有1个数字,小数点后至少要有3个数字。有关以下通配符的更多信息:
https://www.w3schools.com/sql/sql_wildcards.asp
希望这对您有所帮助!
与@Krzysztof 的解决方案类似:
CREATE TABLE article (name VARCHAR2(10), price NUMBER);
INSERT INTO article VALUES ('a', 12.9584);
INSERT INTO article VALUES ('b', 45.874521);
INSERT INTO article VALUES ('c', 0.123);
SELECT * FROM article WHERE ABS(price - TRUNC(price,3)) > 0;
NAME PRICE
a 12,9584
b 45,874521
使用 ROUND
函数 - 您正在寻找 不等于三位数舍入值的数字。
例子——你测试数据
select round(2/3,rownum) price from dual connect by level <= 5
PRICE
----------
,7
,67
,667
,6667
,66667
查询小数点后3位以上的数字
with dt as (
select round(2/3,rownum) price from dual connect by level <= 5
)
select price from dt
where price != round(price,3)
PRICE
----------
,6667
,66667