ฉันมีคอลัมน์ที่เก็บตัวเลขเป็นสตริงเนื่องจากลักษณะของคอลัมน์ที่คาดว่าจะมีประเภทข้อมูลประเภทใดก็ได้ เช่น วันที่ ตัวเลข ตัวเลขอัลฟ่า ฯลฯ
ตอนนี้ฉันต้องตรวจสอบว่าค่าในคอลัมน์นั้นอยู่ในช่วงที่กำหนดหรือไม่ นี่คือข้อมูลตัวอย่างสำหรับการทดสอบ
create table test (val varchar2(10));
insert into test values ('0');
insert into test values ('67');
insert into test values ('129');
insert into test values ('200');
insert into test values ('1');
ช่วงที่คาดหวังที่นี่ซึ่งค่าควรเป็น 0-128 หากค่าไม่อยู่ในช่วง ฉันต้องกรองออกเพื่อการประมวลผลต่อไป
สำหรับสิ่งนี้ ฉันได้เขียนแบบสอบถามบางส่วน แต่ไม่มีสิ่งใดที่ต้องการผลลัพธ์
select *
from test
where val not between '0' and '128';
select *
from test
to_number(val, '9') not between to_number('0', '9') and to_number('128', '9999');
select * from test where
to_number(val, '9') < TO_NUMBER('0', '9')
or
to_number(val, '999') > TO_NUMBER('128', '999')
;
ข้อความค้นหาข้างต้นเหล่านี้กำลังสร้างผลลัพธ์ที่ต้องการ !! :(
ฉันใช้เวอร์ชัน DB -- Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - การผลิต 64 บิต