想设置oracel表的一个约束条件需要判断某列值的一部分是否是纯数字,截取字串好办,mid就行,反而是后面判断是否为数字,oracle里没有专门的判断是否是数字的函数,不象powerbuilder有个isnumber(),可以直接用,不过oracle有其他方法,可以用REGEXP_REPLACE函数,这个函数支持正则表达式,具体到本例,可以用REGEXP_REPLACE(source_char,'[^0-9]',''),这里source_char是要判断的字符串,后面的[^0-9]是正则表达式,表示非数字,具体正则表达式的规则可以去网上找,这里不多说,最后的''表示空字符,注意单引号间没有空格,是用来替换前面字符串中非数字的部分的,这个参数可以省略,省略即表示所有匹配内容都被删除,所以在本例里省略也是可以的,即REGEXP_REPLACE(source_char,'[^0-9]'),反正我们要判断数字,非数字部分无论是用空字符还是删除都是允许的。
用REGEXP_REPLACE去除字符串里的非数字只是判断的第一步,后面要判断其是否为数字可以看替换掉非数字后剩下来的字串长度与原字串长度是否相等,如不等就说明原字串中包含非数字,相等说明原字串全部为数字字符,即length(source_char)=length(REGEXP_REPLACE(source_char,'[^0-9]')),将其放入约束条件,就可以约束指定列必须为全数字的字符。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/2039.html