Sql 验证列应仅允许整数值/正值/负值
我有一个列数量编号(12)。我需要检查此列是否不允许任何十进制和0值,因为允许使用负值和正值 为此,我写了一个查询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。
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语句更改为handle0
。
注:-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 |
+----------+--------+