根据数据类型为NO_TELEPHONE
的{{1}}列,其中包含10位或4位数的电话号码。我必须确保每个数字的最后4位数字都是唯一的(因此VARCHAR2(20 BYTE)
和0000001111
不能同时存在)。
我试过这个:
1111
但它找到0结果,我真的不明白为什么。
经过一些尝试后,我得到了结果:
SELECT * from table where NO_TELEPHONE like '%1111';`
如果我在表中有SELECT * from table where NO_TELEPHONE like '1111%';
SELECT * from table where NO_TELEPHONE like '______1111%'; (there is 6 '_' )
并且我想要插入0000,那么程序将执行:
0000001111
它将与0000001111匹配,这不是我想要的行为
答案 0 :(得分:2)
尝试使用RTRIM
SELECT * from table where RTRIM(NO_TELEPHONE, ' ' , chr(13), chr(10)) like '%1111';
答案 1 :(得分:1)
如果您只想选择可以使用的数据:
SELECT RTRIM( no_telephone, CHR(13)||CHR(10) ) AS no_telephone
FROM table_name
WHERE RTRIM( no_telephone, CHR(13)||CHR(10) ) LIKE '%1111';
但是,如果要更正数据::
UPDATE table_name
SET no_telephone = RTRIM( no_telephone, CHR(13)||CHR(10) )
WHERE SUBSTR( no_telephone, -2 ) = CHR(13)||CHR(10);
或者,如果有更多问题,并且您想要替换所有非数字,则:
UPDATE table_name
SET no_telephone = REGEXP_REPLACE( no_telephone, '\D+' );
然后你可以强制执行最后4个字符的唯一性:
CREATE UNIQUE INDEX table_name__no_telephone__u
ON table_name ( SUBSTR( no_telephone, -4 ) );
您可以使用以下方式强制执行列的格式:
ALTER TABLE table_name ADD CONSTRAINT table_name__no_telephone__chk
CHECK ( REGEXP_LIKE(no_telephone, '^\d{4}\d{6}?$' ) );