我有一列数量NUMBER(12)。我需要检查此列不应该允许任何小数,并且0的值为允许为负和正值。
为此,我写了一个查询
select case when trim(TRANSLATE('quantity','+-123456789', ' ')) is null
then 'T'
else 'F'
end
from dual
quantity like 10/100/1000 etc
。
请帮我修改查询以允许10或100或等等但不允许+ -0。
答案 0 :(得分:0)
如果您正在使用MYSQL数据库,那么您只需更改表格并将其设为signed 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);
答案 1 :(得分:0)
更新:更改案例陈述以处理0
。
注意:-0
,0
,+0
相同,仅作为0
存储在数据库中。
case when trim(TRANSLATE(quantity,'-1234567890', ' ')) is null
and quantity<>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 |
+----------+--------+