【问题标题】:INITCAP in MariaDBMariaDB 中的 INITCAP
【发布时间】:2020-05-11 14:12:26
【问题描述】:

我目前正在尝试检查插入到我的 MariaDB 表中的每个值是否是每个大写单词的第一个字母,所以我尝试使用 CONSTRAINT nombreok CHECK (INITCAP(nombre_director) = nombre_director)); 但它不起作用,因为它给了我一个错误说函数 INITCAP() 不能在 CHECK 中使用...我能做些什么来解决它?

【问题讨论】:

    标签: sql regex database mariadb constraints


    【解决方案1】:

    我认为initcap() 不是确定性的,因为结果可能取决于数据库的默认排序规则(在某些情况下)。

    您可以使用以下方法确保第一个字符大写:

    CONSTRAINT nombreok CHECK (not (nombre_director collate latin1_general_cs) REGEXP '(^|[[:space:]])[[:lower:]]')
    

    Here 是一个 dbfiddle。

    如果你也想检查小写:

    CONSTRAINT nombreok CHECK ((nombre_director collate latin1_general_cs) REGEXP '^([[:upper:]][[:lower:]]+([[:space:]]+|$))+$')
    

    但是,您可能希望将其扩展到字母字符之外。

    Here 是一个 dbfiddle。

    【讨论】:

    • 你在mariadb中试过了吗?我认为它不起作用
    • 如果我还想在“-”后面检查大写怎么办?
    • 将其添加到您要查找的字符中。对于连字符,我会以(^|[[:space:]]|[-]) 开始正则表达式,因为连字符是一个特殊字符。
    • 但我真的认为这个表达式不起作用,因为如果你输入'Abc $ab',它不会例外......应该不让他们进入。
    • @Trickv2 。 . .你应该问一个问题,提供你想要完成的所有细节,以及足够的例子来涵盖你知道的案例。
    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多