Oracle查询:UserName列姓名反转时的WHERE条件写法
姓名格式反转匹配的WHERE子句写法
假设你的目标匹配字符串是'Bill Clinton'(名字+空格+姓氏),需要匹配表中UserName字段存储为'Clinton Bill'(姓氏+空格+名字)的行,以下是主流数据库的WHERE子句写法:
MySQL/MariaDB
利用SUBSTRING_INDEX函数拆分姓氏和名字,反转拼接后和目标字符串比较:
WHERE CONCAT(SUBSTRING_INDEX(UserName, ' ', -1), ' ', SUBSTRING_INDEX(UserName, ' ', 1)) = 'Bill Clinton'
如果需要忽略大小写匹配,可以统一转成小写:
WHERE LOWER(CONCAT(SUBSTRING_INDEX(UserName, ' ', -1), ' ', SUBSTRING_INDEX(UserName, ' ', 1))) = LOWER('Bill Clinton')
SQL Server
通过CHARINDEX定位空格位置,拆分后反转拼接:
WHERE CONCAT( SUBSTRING(UserName, CHARINDEX(' ', UserName) + 1, LEN(UserName)), ' ', SUBSTRING(UserName, 1, CHARINDEX(' ', UserName) - 1) ) = 'Bill Clinton'
PostgreSQL
使用SPLIT_PART按空格拆分字段,反转拼接:
WHERE CONCAT(SPLIT_PART(UserName, ' ', 2), ' ', SPLIT_PART(UserName, ' ', 1)) = 'Bill Clinton'
注意事项
- 以上写法默认
UserName字段严格遵循「姓氏 名字」格式,仅包含一个空格;如果存在中间名或多空格场景,需要额外处理(比如先清理多余空格)。 - 部分数据库默认区分大小写,根据实际需求添加大小写转换函数。
内容的提问来源于stack exchange,提问作者Markus1980Wien
相关产品推荐
相关产品推荐

