Oracle SQL, varchar2, like with number

Oracle SQL, varchar2, like with number

给定一个 table,其 NO_TELEPHONE 列的数据类型为 VARCHAR2(20 BYTE),其中包含 10 位或 4 位数字 phone。我必须确保每个数字的最后 4 位数字都是唯一的(因此 00000011111111 不能同时存在)。

我试过这个:

SELECT * from table where NO_TELEPHONE like '%1111';`

但是查到0个结果,我真的不明白为什么。

经过一些尝试,我得到了以下结果:

SELECT * from table where NO_TELEPHONE like '1111%';
SELECT * from table where NO_TELEPHONE like '______1111%';  (there is 6 '_' )

如果我在 table 中有 0000001111 并且我想插入 0000,那么程序将执行:

SELECT * from table where NO_TELEPHONE like '0000%';

它会匹配 0000001111,这不是我想要的行为

尝试使用 RTRIM

 SELECT * from table where RTRIM(NO_TELEPHONE, ' ' , chr(13), chr(10)) like '%1111';

如果你只想select你可以使用的数据:

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}?$' ) );