Oracle SQL, varchar2, like with number
Oracle SQL, varchar2, like with number
给定一个 table,其 NO_TELEPHONE
列的数据类型为 VARCHAR2(20 BYTE)
,其中包含 10 位或 4 位数字 phone。我必须确保每个数字的最后 4 位数字都是唯一的(因此 0000001111
和 1111
不能同时存在)。
我试过这个:
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}?$' ) );
给定一个 table,其 NO_TELEPHONE
列的数据类型为 VARCHAR2(20 BYTE)
,其中包含 10 位或 4 位数字 phone。我必须确保每个数字的最后 4 位数字都是唯一的(因此 0000001111
和 1111
不能同时存在)。
我试过这个:
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}?$' ) );