Sql 验证列应仅允许整数值/正值/负值

Sql 验证列应仅允许整数值/正值/负值,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个列数量编号(12)。我需要检查此列是否不允许任何十进制和0值,因为允许使用负值和正值 为此,我写了一个查询 select case when trim(TRANSLATE('quantity','+-123456789', ' ')) is null then 'T' else 'F' end from dual 当数量如10/100/1000等时,上述查询无法正常工作 请帮助我修改查询以允许10或100等,但不允许+-0。

我有一个列数量编号(12)。我需要检查此列是否不允许任何十进制和0值,因为允许使用负值和正值

为此,我写了一个查询

select case when trim(TRANSLATE('quantity','+-123456789', ' ')) is null
            then 'T'
            else 'F'
       end
from dual
数量如10/100/1000等
时,上述查询无法正常工作


请帮助我修改查询以允许10或100等,但不允许+-0。

如果您使用的是MYSQL数据库,则只需更改表并将其设置为
签名int
。像这样:

ALTER TABLE 'myTable' MODIFY 'quantity' INT SIGNED 
在PLSQL中:

alter table
   myTable
modify
   quantity INT;

alter table myTable
    modify quantity INT,
         constraint ckValue check (quantity <> 0);
alter表
我的桌子
修改
数量INT;
更改表myTable
修改数量INT,
约束值检查(数量0);

更新:将case语句更改为handle
0
。 注:
-0
0
+0
0
相同,仅存储在数据库中

case when trim(TRANSLATE(quantity,'-1234567890', ' ')) is null 
and quantity<>0

为什么不使用整数而不是数字字段呢。那么您只需要检查它是否>0@Teepu-删除了MySQL标记,因为它看起来像Oracle查询,而
translate
在MySQL上不起作用。它应该允许甚至是负数values@Strawberry:-没有看到零的部分。更新了我的答案。感谢您的指点。我无法进行检查约束,因为我需要将记录标记为错误,以便用户可以更正。但查询不应接受0或-0或+0。我如何才能做到这一点?请检查更新的答案。如果它对你有效,那么接受它,问题可能会被解决。谢谢
with tbl (quantity) as
(select 1.1 from dual union all
select 10 from dual union all
select 100 from dual union all
select 1000 from dual union all
select -44 from dual union all
select  0 from dual union all
select -0 from dual union all
select +0 from dual)
select quantity,case when trim(TRANSLATE(quantity,'-1234567890', ' ')) is null 
and quantity<>0
            then 'T'
            else 'F'
       end as is_int
from tbl
+----------+--------+
| Quantity | IS_INT |
+----------+--------+
|      1.1 | F      |
|       10 | T      |
|      100 | T      |
|     1000 | T      |
|      -44 | T      |
|        0 | F      |
|        0 | F      |
|        0 | F      |
+----------+--------+