如何在列上创建完全不区分大小写的检查约束



我正试图为一个表编写一个约束,该表只允许名为"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')
);

最新更新