【问题标题】:Case-Insensitive Check Constraint不区分大小写的检查约束
【发布时间】:2018-01-09 15:31:43
【问题描述】:

创建了下表:

CREATE TABLE VEHICLES

(vehicleVIN VARCHAR(30) PRIMARY KEY,

vehicleType VARCHAR(30) NOT NULL CHECK (vehicleType IN ('compact', 'midsize', 'fullsize', 'suv', 'truck')),

vehicleWhereFrom VARCHAR(30) NOT NULL CHECK (vehicleWhereFrom IN ('maryland','virginia','washington, d.c.'));

在运行插入命令时,带有大写字母的条目(例如:Compact、COMPACT、Maryland、VIRGINIA 等)违反了检查约束(错误 ORA-02290)。如何使检查约束不区分大小写?期望的结果是无论使用大小写,只要单词拼写正确,插入的数据就会被接受。通过 NOVA 使用 Oracle 数据库。谢谢!

【问题讨论】:

  • 将这些列定义为不区分大小写的排序规则。
  • 所以,类似:vehicleType VARCHAR(30) NOT NULL COLLATE BINARY_CI CHECK (vehicleType IN ('compact', 'midsize', 'fullsize', 'suv', 'truck')); ??
  • 是的,或者其他不区分大小写的排序规则! (或其他不区分大小写的排序规则,取决于您的需要。)

标签: sql oracle novaclient


【解决方案1】:

使用lower 检查列的小写版本。

CHECK vehicleType VARCHAR(30) NOT NULL CHECK (lower(vehicleType) IN ('compact', 'midsize', 'fullsize', 'suv', 'truck')),
CHECK vehicleWhereFrom VARCHAR(30) NOT NULL CHECK (lower(vehicleWhereFrom) IN ('maryland','virginia','washington, d.c.'));

【讨论】:

  • 谢谢。今晚我可以访问服务器时尝试。出于某种原因,我认为这只会检查小写的任何内容,但现在似乎有意义。自从我弄乱 SQL 以来已经有几年了。感谢您的复习!
  • 这成功了,正如预期的那样。再次感谢你帮助我回忆我的记忆!祝你好运!
【解决方案2】:

你可以使用

CHECK (REGEXP_LIKE(vehicleType,'compact|midsize|fullsize|suv|truck','i'))

【讨论】:

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