mysql - 在 SQL 中正确地大写名称

标签 mysql replace

我想正确地将名字大写,在这种情况下意味着:

  • 首字母大写。
  • 空格后的第一个字母大写('Van Helsing',而不是'Van helsing')
  • 破折号后的第一个字母大写(“Johnson-Smith”,而不是“Johnson-smith”)
  • 没有其他字母大写。

第一个和最后一个需求很容易处理:

CONCAT(LEFT(name, 1), LOWER(RIGHT(name, LENGTH(name) - 1)))

其他的更难。我写了一个 54 次嵌套的 REPLACE 语句(当然不是手写,我用的是 Excel)

REPLACE(REPLACE(REPLACE(REPLACE(...,' b',' B'),'-b','-B'),' a',' A'),'-a','-A')

但我觉得必须有一个更优雅和可维护的解决方案。有什么想法吗?

如果有一个与我的要求相似但不完全相同的内置函数,那可能没问题。


编辑:此脚本将仅在已经丢失大写的名称上运行,因此不存在错误处理晦涩名称的危险。不过,处理空格和破折号等撇号会很好。浏览当前数据会发现,许多 (~30%) 名称至少具有 [-' ] 之一。

最佳答案

“Van den Berg”(有一个小写的“d”)呢? “麦当劳”或“O'Reilly”怎么样。

过度验证人们的名字通常被认为是一个坏主意,因为总会有一个合法的名字打破你的验证。

另请参阅我对之前类似问题的回答:How to "Validate" Human Names in CakePHP?

关于mysql - 在 SQL 中正确地大写名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997535/

相关文章:

php - 从 mysql 数据库表加载 php 脚本

php - 数据库中的第一行未通过 mysql_fetch_row 或 mysql_fetch_assoc 显示在表中

java - 替换字符串中特定索引处的字符?

JavaScript:用 DIV 替换 P 的正则表达式

php - 更新查询未按预期工作

php - mysql 长时间查询

r - 有条件地替换数据集 R 上的值

javascript - 如何在 Javascript 中用数组对象的值中的其他子字符串替换子字符串?

MySQL 查询 UNION 返回修剪后的字符串

javascript - 如何提高这个JS函数的速度