在 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'))
);
这是我的一段代码。
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'))
);