在 SQL 中如何使检查约束不区分大小写?

How do you make your check constraint case insensitive in SQL?

这是我的一段代码。

CREATE TABLE ORDER_SOURCE(
    OS_ID NUMBER(4),
    OS_DESC VARCHAR2(20),
    CONSTRAINT order_source_os_id_pk PRIMARY KEY (OS_ID),
    CONSTRAINT order_source_os_desc_cc CHECK ((OS_DESC='CATALOG DESCRIPTION') OR (OS_DESC='WEB SITE'))
);

我也希望能够插入小写的值。下面的示例:

INSERT INTO ORDER_SOURCE VALUES(0002,'Web Site');

但我可以编辑我的检查约束以添加 'Web Site' 或 'Catalog',我只是想尝试其他方法。谢谢

您可以将列小写,然后与小写字符串文字进行比较:

CONSTRAINT order_source_os_desc_cc
CHECK (LOWER(OS_DESC) IN ('catalog description', 'web site'))

upper()lower() 将是最简单的方法,但为了完整性,从 12.2 开始还有 collate binary_ci (不区分大小写)或 binary_ai (另外不区分重音)。

create table order_source
( os_id      number(4) constraint order_source_os_id_pk primary key
, os_desc    varchar2(20) not null
             constraint order_source_os_desc_cc
                        check (os_desc collate binary_ci in ('CATALOG DESCRIPTION', 'WEB SITE'))
);