【问题标题】:Create Unqiue case-insensitive constraint on two varchar fields在两个 varchar 字段上创建唯一不区分大小写的约束
【发布时间】:2011-04-26 01:58:12
【问题描述】:

在 Oracle 10g 中,如何在两个 varchar 字段上添加唯一不区分大小写的约束?例如,假设表中已有以下记录:

"Stephen", "Swensen"
"John", "Smith"

以下插入无效:

"stephen", "Swensen"
"John", "smith"
"stephen", "swensen"

但以下插入是有效的:

"Stephen", "Smith"
"John", "Swensen"

【问题讨论】:

    标签: sql oracle10g unique-constraint


    【解决方案1】:

    假设您的表名为 person,名字和姓氏列分别称为 first_namelast_name,请添加此唯一约束:

    ALTER TABLE person ADD CONSTRAINT person_name_unique
        UNIQUE(LOWER(first_name),LOWER(last_name));
    

    如果我正确理解了您的问题并对您的表格布局做出了正确的假设,请告诉我。

    【讨论】:

    • 我不认为LOWER 属于这样的约束。最好指定一个排序规则。
    • 你明白了,谢谢!我也发现了这个,它也很有效:create unique index UK_U_FIRSTNAME_LASTNAME on PERSON (LOWER(FIRST_NAME), LOWER(LAST_NAME));
    • LOWER(COL_NAME) 在 UNIQUE 中不起作用。给出错误 SQL 错误:ORA-00904: : 标识符无效
    【解决方案2】:

    我已经设法让它工作了:

    CREATE UNIQUE INDEX person_name_upper ON person(
        UPPER(first_name), UPPER(last_name));
    

    【讨论】:

    • 使用 postgresql 9.4,这是适用于 me.michael 上面接受的解决方案的解决方案引发了语法异常,不喜欢 lower 声明中的 lower 关键字。
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2020-12-25
    • 1970-01-01
    • 2020-07-22
    • 2017-04-15
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多