mysql中我想查找所有中文之间是否有-该如何实现(比如:122我不想-12-3楼-1.8L-800M,因为第一个中文我和最后一个中文楼之间有-所以检索结果应该为“有”)
时间: 2024-11-16 14:20:12 浏览: 10
在MySQL中,如果你想要查找`Cell_Name`字段中是否存在连续的中文字符之间的减号(`-`),可以利用`LIKE`运算符结合`REGEXP`模式匹配来实现。然而,MySQL的`LIKE`不支持正则表达式,所以我们需要借助`SUBSTRING_INDEX()`函数结合`FIND_IN_SET()`或者`INSTR()`函数来间接达到目的。
首先,创建一个临时表存储中文字符及其对应的索引位置,然后检查相邻的两个位置之间是否存在`-`:
```sql
CREATE TEMPORARY TABLE ChinesePositions (
Chinese VARCHAR(255),
Pos INT
) AS (
SELECT
GROUP_CONCAT(CONCAT('_', SUBSTRING(Cell_Name, Pos+1, INSTR(Pos+1, '中文', 1))) ORDER BY Pos SEPARATOR ',')
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY Pos) as Pos,
SUBSTRING_INDEX(SUBSTRING_INDEX(Cell_Name, '中文', numbers.n), '中文', -1) as Chinese
FROM
Cell_Name
CROSS JOIN
(SELECT a.N + b.N * 10000 FROM
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
) numbers
WHERE Pos > 0 AND Pos < LENGTH(Cell_Name) AND Cell_Name LIKE '%中文%'
) t
);
SELECT
CASE
WHEN FIND_IN_SET('-', REPLACE(ChinesePositions.Chinese, ',', '')) > 0 THEN '有'
ELSE '无'
END AS HasDash
FROM
ChinesePositions;
```
这个查询会返回一个布尔值,表示是否存在连续的中文字符之间有`-`。
阅读全文