Sql 检查Oracle中的字符格式

Sql 检查Oracle中的字符格式,sql,oracle,Sql,Oracle,这可能是一个显而易见的问题,但Oracle Technet对我的搜索词并不友好。我想创建一个表,并有一个具有特定格式的字符列。例如,检查约束将确保插入的SSN字符串的格式为“####-#-#-##-##”,包括破折号。如何指定此检查?我从未执行过类似的操作,但请尝试以下操作: CREATE TABLE suppliers ( supplier_id numeric(4), supplier_name varchar2(50), CONSTRAINT check_s

这可能是一个显而易见的问题,但Oracle Technet对我的搜索词并不友好。我想创建一个表,并有一个具有特定格式的字符列。例如,检查约束将确保插入的SSN字符串的格式为“####-#-#-##-##”,包括破折号。如何指定此检查?

我从未执行过类似的操作,但请尝试以下操作:

CREATE TABLE suppliers
(   supplier_id numeric(4), 
    supplier_name   varchar2(50),   
    CONSTRAINT check_supplier_id
        CHECK (supplier_id REGEXP_LIKE(testcol, '^... .. ....$');)
);

以特定格式存储数据通常不是一个好主意。格式只是敲钟和哨子,不同的情况可能需要不同的格式。再加上本地化,这显然不是一个好主意


您可能希望在检索数据后格式化。这可以通过使用数据库触发器来完成。

更复杂的验证可以通过使用数据库触发器来完成。也许你错过了这个搜索词。

除了最佳实践之外,数据的格式永远是一样的。虽然我想我可以在其他地方而不是在insert中进行检查,但我只是想让表只接受这种格式会很好,因为它将是一个静态字符串。可能可以工作,但如果这是唯一的选项,我不会运行regex。谢谢