mysql 按照某个字段括号里的字符串排序

最近写一个查询排序按照一个字段的括号里的一段字段排序:


description 显示为 Buyer's Guide(English) 或者 Buyer's Guide(中文) 让这个字段按照英语排序


可以用下面的方法:


SELECT* from mot_media where  media_date like '%2015-12-24 %'  
ORDER BY FIELD(substring(media_description, locate('(', media_description),locate(')', media_description)),'(English)') DESC


ok 如果有错,希望指正!!!

<think>我们正在处理一个SQL查询问题:如何查找包含下划线字符的字符串。 在SQL中,下划线(_)是一个通配符,代表任意单个字符。因此,如果我们直接使用LIKE '%_%',它会匹配任何至少包含一个字符的字符串(因为下划线匹配任意单个字符),而不是字面意义上的下划线。 所以,我们需要转义下划线字符,以匹配实际的下划线。 根据引用[2]中的示例,我们可以使用ESCAPE子句来指定转义字符。例如: SELECT * FROM table_name WHERE column_name LIKE '%\_%' ESCAPE '\'; 这,我们使用反斜杠(\)作为转义字符,这样模式中的'\_'就表示实际的下划线字符。 另外,引用[2]还提到了使用正则表达式的方法(在Oracle中,使用REGEXP_LIKE函数): SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, '_'); 注意,在正则表达式中,下划线是一个普通字符(除非在方括号表达式中),所以直接使用即可。但是,这种方法依赖于数据库是否支持正则表达式函数。 因此,我们可以提供两种方法: 1. 使用LIKE和ESCAPE子句(适用于大多数SQL数据库,如MySQL、Oracle、SQL Server等,但语法可能略有不同,这以Oracle为例)。 2. 使用正则表达式函数(如Oracle的REGEXP_LIKE,MySQL的REGEXP,SQL Server的LIKE结合通配符的方式可能不支持正则表达式,但SQL Server可以使用PATINDEX等函数)。 但是,考虑到用户的问题没有指定具体的数据库,我们尽量提供通用的方法,并指出可能存在的差异。 另外,引用[1]和引用[3]的内容与当前问题关联不大,引用[1]是关于SQL注入的,引用[3]是关于字符串分段排序的。 因此,我们给出以下回答:</think>在SQL中查询包含下划线(`_`)字符的字符串时,由于下划线是SQL的**通配符**(表示任意单个字符),必须使用转义机制才能精确匹配字面意义的下划线。以下是两种常用方法: ### 方法1:使用`LIKE`配合`ESCAPE`子句(通用性强) ```sql SELECT * FROM 表名 WHERE 字段名 LIKE '%\_%' ESCAPE '\'; ``` - **`ESCAPE '\'`**:声明反斜杠为转义符 - **`\_`**:表示字面意义的下划线字符 - **`%`**:匹配任意长度字符(0或多个字符) ### 方法2:使用正则表达式(数据库需支持) ```sql -- PostgreSQL/Oracle SELECT * FROM 表名 WHERE 字段名 ~ '_'; -- 或使用 regexp_like(字段名, '_') -- MySQL SELECT * FROM 表名 WHERE 字段名 REGEXP '_'; ``` > 注意:正则表达式中下划线是普通字符,无需转义[^2]。 ### 关键说明 1. **通配符冲突** 直接使用`LIKE '%_%'`会匹配**所有非空字符串**,因为`_`在SQL中代表任意单字符 2. **转义符自定义** 可替换`ESCAPE`后的字符,例如用`ESCAPE '!'`时需写为`%!_%` 3. **性能建议** 对大数据集优先使用`LIKE`,正则表达式通常更耗时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值