我正试图为一个表编写一个约束,该表只允许名为"filename"的列接受包含".docx"、".doc"、".pdf"one_answers".txt"的条目。我还希望文件扩展名不区分大小写,所以,'。PDF和.PDF等也将被接受。我试过这个代码:
ALTER TABLE DOCS ADD CONSTRAINT DOCS_EXTENSION_CHK CHECK(FILENAME IN ('.docx', '.doc', '.pdf', '.txt'));
我尝试为具有不同扩展名的文件插入多个名称,例如"RANDOMFILE.doc"one_answers"FILENAME"。PdF,但我收到了一个错误。
我需要约束,也允许扩展名之前的文件名是任何东西,比如"xxxx.docx".
如果有人能帮我,我将非常感激。
使用regexp_like()
:
ALTER TABLE DOCS ADD CONSTRAINT DOCS_EXTENSION_CHK
CHECK (REGEXP_LIKE(LOWER(FILENAME), '[.]docx$|[.]doc$|[.]pdf$|[.]txt$'));
或者更简单地说:
ALTER TABLE DOCS ADD CONSTRAINT DOCS_EXTENSION_CHK
CHECK (REGEXP_LIKE(LOWER(FILENAME), '[.](docx|doc|pdf|txt)$'));
正则表达式很好。但你可以像下面的一样简单地使用lower()
和like()
ALTER TABLE DOCS ADD CONSTRAINT DOCS_EXTENSION_CHK
CHECK (
lower(FILENAME ) LIKE ('%.docx')
or lower(FILENAME ) LIKE ('%.doc')
or lower(FILENAME ) LIKE ('%.pdf')
or lower(FILENAME ) LIKE ('%.txt')
);