如何子字符串化和添加范围

问题描述

我有一个需要缩短的URL。我有2种格式的URL,第一种是/item/10/0100-,它在第一个-处停止,第二种是/item/12/0100-CAK,在-之后还需要3个字符。

下面是示例

/item/10/0100-NAU1X010-10-A032 need to be /item/10/0100- 
/item/2/0888-ADBACS11101-2-A048 need to be /item/2/0888-
/item/12/0100-CAK101827812018101-12-A034 need to be /item/12/0100-CAK 
/item/3/0110-MSS0016-T03-3-A034 need to be /item/3/0110-MSS 

我已经尝试过该查询

CASE
 WHEN Page LIKE "/item/10%" OR Page LIKE "/item/2/%" THEN CONCAT(SUBSTRING_INDEX(SUBSTR(Page,LOCATE('/',Page)+1),'-',1),"-")
 WHEN Page LIKE "/item/12%" OR Page LIKE "/item/3/%" THEN SUBSTRING_INDEX(SUBSTR(Page,1) + 4
ELSE Page
END

但这并不能给我正确的结果。看起来很简单,但我真的无法克服。请帮助我解决这个问题,谢谢。

解决方法

SELECT Path,SUBSTRING(Path FROM 1 FOR LOCATE('-',Path) + 3 * (@format = 2)) AS shortened
FROM test;

格式由/ item /

后的数字区分
SELECT Path,Path) + 3 * (SUBSTRING_INDEX(SUBSTRING_INDEX(Path,'/',3),-1) IN (12,3))) AS shortened,(SUBSTRING_INDEX(SUBSTRING_INDEX(Path,3)) + 1 used_format
FROM test;

调整format 2的值列表。

fiddle

,

在CASE表达式中使用字符串函数,如下所示:

SELECT 
  page,CASE
    WHEN Page LIKE '/item/10%' OR Page LIKE '/item/2/%' THEN 
      CONCAT(SUBSTRING_INDEX(Page,'-',1),'-')
    WHEN Page LIKE '/item/12%' OR Page LIKE '/item/3/%' THEN 
      CONCAT(SUBSTRING_INDEX(Page,SUBSTR(Page,LOCATE('-',Page),4))
    ELSE Page
  END short_Page
FROM tablename 

请参见demo
结果:

> page                                     | short_Page       
> :--------------------------------------- | :----------------
> /item/10/0100-NAU1X010-10-A032           | /item/10/0100-   
> /item/2/0888-ADBACS11101-2-A048          | /item/2/0888-    
> /item/12/0100-CAK101827812018101-12-A034 | /item/12/0100-CAK
> /item/3/0110-MSS0016-T03-3-A034          | /item/3/0110-MSS 

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...