【问题标题】:INITCAP in MariaDB constraintMariaDB 约束中的 INITCAP
【发布时间】:2020-05-24 21:43:15
【问题描述】:

我目前正在尝试在 MariaDB 中创建一个约束,检查每个空格后是否有一个大写字母(只是为了检查人名的正确格式)并且我尝试过使用 INITCAP 但它不允许我这样做在一张支票。你能帮我做吗?

pepe Antonio -> It shouldn't go in
Pepe antonio -> It shouldn't go in
Pepe Antonio -> It should go in

【问题讨论】:

  • 首字母大写偏向于爱尔兰和荷兰。

标签: mysql sql database mariadb constraints


【解决方案1】:

我们可以在这里使用REGEXP 与以下正则表达式模式:

^[A-Z][a-z]*(?: [A-Z][a-z]*)*$

SELECT *
FROM yourTable
WHERE some_column REGEXP '^[A-Z][a-z]*(?: [A-Z][a-z]*)*$';

点击下面的链接,查看带有示例输入的正在运行的正则表达式演示:

Demo

如果您认为名称可能包含大小写字母以外的其他内容,我们可以调整模式。

【讨论】:

  • 我觉得可能会更简单,这是一个困难的表达D:
【解决方案2】:

你可以使用:

name not regexp binary '(^| )[[:lower:]]'

Here 是一个 dbfiddle。

binary 是因为较新版本的 MariaDB 具有不区分大小写的正则表达式匹配。而且你显然很关心大小写。

这是如何工作的:

'(^| )[[:lower:]]'
--^ beginning of string
----^ space
-----^ expression has either one
------^ followed by a lower-case character

当然,这不是你想要的。因此,NOT REGEXP.

【讨论】:

  • @user12866845 。 . .你看过 dbfiddle 吗?
  • “二进制”字的用途是什么?
  • @user12866845 。 . .是的,在 dbfiddle 上。 binary 关键字是必需的,因为 MariaDB(至少在较新的版本中)对正则表达式使用不区分大小写的比较。
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2014-10-20
  • 1970-01-01
  • 2019-11-02
  • 2017-10-04
  • 1970-01-01
相关资源
最近更新 更多