我想在MySQL中实现增量搜索。该搜索将从左到右。
我在MySQL中有以下数据。
测试数据库:http://sqlfiddle.com/#!9/d23e0/1
情景:
+-------+
| code |
+-------+
| 0412 |
| 05412 |
| 1412 |
| 20412 |
| 28412 |
| 30412 |
| 34120 |
| 34121 |
| 34122 |
| 37412 |
| 40412 |
| 412 |
| 41412 |
| 4412 |
| 47412 |
| 52412 |
我想要检索其中包含'4'的所有代码。代码应按以下顺序返回。首先是所有代码在第一个位置都有'4',然后在第二个位置有'4',依此类推。 输出应为:
+-------+
| code |
+-------+
| 40412 |
| 412 |
| 41412 |
| 4412 |
| 47412 |
| 0412 |
| 1412 |
| 34120 |
| 34121 |
| 34122 |
| 05412 |
| 20412 |
| 28412 |
| 30412 |
| 37412 |
| 52412 |
编辑:我修改了要求。
答案 0 :(得分:1)
Mysql有SUBSTRING_INDEX,它根据给定的分隔符返回给定列的子字符串。 您可以使用此操作执行订单操作。 对于您列出的两种方案,您可以使用以下查询
KalturaClient
答案 1 :(得分:1)
注意:这是原始问题的解决方案已被更改(因为没有人说得对...包括我自己)。
原始要求:仅返回那些包含' 4'如果没有这样的代码,则在第一个位置返回具有'在第二位等等..
SQL小提琴:http://sqlfiddle.com/#!9/d23e0/24
SELECT t1.code, t1.digitGroup, t1.thePosition
FROM
(
SELECT code,
CASE WHEN CHAR_LENGTH(code) >= 1 AND SUBSTRING(code, 1, 1) = '4' THEN 1
WHEN CHAR_LENGTH(code) >= 2 AND SUBSTRING(code, 2, 1) = '4' THEN 2
WHEN CHAR_LENGTH(code) >= 3 AND SUBSTRING(code, 2, 1) = '4' THEN 3
WHEN CHAR_LENGTH(code) >= 4 AND SUBSTRING(code, 2, 1) = '4' THEN 4
WHEN CHAR_LENGTH(code) >= 5 AND SUBSTRING(code, 2, 1) = '4' THEN 5
ELSE 0
END AS digitGroup,
POSITION('4' IN code) AS thePosition
FROM icd9_codes
) t1
WHERE t1.digitGroup > 0 AND t1.digitGroup =
(
SELECT MIN(t2.theMin) FROM
(
SELECT CASE WHEN POSITION('4' IN code) = 0 THEN 5
ELSE POSITION('4' IN code)
END AS theMin
FROM icd9_codes
) t2
)