【问题标题】:How do you make your check constraint case insensitive in SQL?如何在 SQL 中使检查约束不区分大小写?
【发布时间】:2021-10-16 15:16:57
【问题描述】:

这是我的一段代码。

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');

但我可以编辑我的检查约束以添加“网站”或“目录”,我只是想尝试其他的东西。谢谢。

【问题讨论】:

    标签: sql oracle constraints


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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'))
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2016-12-24
        • 2013-05-11
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多