我想正确地将名字大写,在这种情况下意味着:
- 首字母大写。
- 空格后的第一个字母大写('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/