【问题标题】:How can I get multiple values from string using SUBSTRING_INDEX()如何使用 SUBSTRING_INDEX() 从字符串中获取多个值
【发布时间】:2018-03-08 09:38:51
【问题描述】:

我有一个表格,我从中提取一些值,一列值可以包含

'FLSD202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT'

我想把它们拆分成

FLSD202 AS first column
-D-B-D-AB-C1-NN-A-N-LA-J-NN AS Second column
/UM/H7/SCT AS third column

这是我的脚本,但我无法得到我想要的结果

SELECT 'FLSD202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT', SUBSTRING_INDEX(SUBSTRING_INDEX('FLXA202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT', '-',1), '-', -1) FirstColumn, 
CONCAT('-', SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX('FLSD202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT', '/',1), '/', -1), '-',-1)) SecondColumn,
CONCAT('/', SUBSTRING_INDEX(SUBSTRING_INDEX('FLSD202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT', '/',3), '/', -1)) ThirdColumn

我想将它用于所有值,而不仅仅是一个字段..

'-'(dash) 是动态的,'/'(slash) 是动态的,例如: SSS145-SS3/POP, KEEE-CDE0/NO/SA, WXAE-C-D/E/G, SAD-SEU-SFX/OPS

谢谢

【问题讨论】:

  • 要实现这一点,您需要制定一个程序。
  • 有些任务最好用应用程序代码而不是 SQL 来完成。
  • 我同意@RickJames,只需将字符串提取到 Python 或 Ruby 或 PHP 或 任何其他语言 中,任务就变得微不足道了。如果您不喜欢这样做,请不要为应该是单独字符串的数据存储单个字符串。

标签: mysql string indexing split substring


【解决方案1】:

我认为下面的代码将帮助您完成您的要求。

SET @a = 'FLSD202-D-B-D-AB-C1-NN-A-N-LA-J-NN/UM/H7/SCT';
SET @dash_start_position = LOCATE('-',@a); 
SET @slash_start_position = LOCATE('/',@a);
SELECT SUBSTRING(@a, 1, @dash_start_position-1) as First, IF(@slash_start_position IS NOT NULL AND @slash_start_position > 0, SUBSTRING(@a, @dash_start_position, @slash_start_position - @dash_start_position), SUBSTRING(@a, @dash_start_position)) as Second,SUBSTRING(@a, @slash_start_position) as Third;

【讨论】:

  • 嗨@Jack,这段代码也在运行,但我使用第二个测试'POOOO-90'给我空白。任何想法?谢谢
  • 我修改了请验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多