在 MySQL 数据库上操作字符串
Manipulate strings on MySQL database
我有这些字符串:X322-1-381128
和 X322-1-383128
我需要操作这些字符串以获得输出:
X322138128
和 X322138328
我试过这个解决方案但没有成功,因为输出只是:X322138128
你能帮帮我吗?
mysql> SELECT
'X322-1-381128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
SUBSTRING('X322-1-381128' ,- 3) d,
CONCAT(
SUBSTRING_INDEX('X322-1-381128', '-', 1),
SUBSTRING('X322-1-381128', 6, 1),
SUBSTRING('X322-1-381128', 8, 2),
SUBSTRING('X322-1-381128' ,- 3)
) output,
'X322-1-383128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
SUBSTRING('X322-1-381128' ,- 3) d,
CONCAT(
SUBSTRING_INDEX('X322-1-383128', '-', 1),
SUBSTRING('X322-1-383128', 6, 1),
SUBSTRING('X322-1-383128', 8, 2),
SUBSTRING('X322-1-383128' ,- 3)
) output;
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| string | a | b | c | d | output | string | a | b | c | d | output |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| X322-1-381128 | X322 | 1 | 38 | 128 | X322138128 | X322-1-383128 | X322 | 1 | 38 | 128 | X322138128 |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
1 row in set
使用
替换('X322-1-381128','-')
看起来你最后的 SUBSTRING
是错误的。您要删除所有 -
和倒数第三个数字:
SELECT
'X322-1-381128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
CONCAT(SUBSTRING('X322-1-381128' ,-4,1), SUBSTRING('X322-1-381128' ,-2)) d,
CONCAT(
SUBSTRING_INDEX('X322-1-381128', '-', 1),
SUBSTRING('X322-1-381128', 6, 1),
SUBSTRING('X322-1-381128', 8, 2),
SUBSTRING('X322-1-381128' ,- 3)
) output,
'X322-1-383128' string,
SUBSTRING_INDEX('X322-1-383128', '-', 1) a,
SUBSTRING('X322-1-383128', 6, 1) b,
SUBSTRING('X322-1-383128', 8, 2) c,
CONCAT(SUBSTRING('X322-1-383128' ,-4,1), SUBSTRING('X322-1-383128' ,-2)) d,
CONCAT(
SUBSTRING_INDEX('X322-1-383128', '-', 1),
SUBSTRING('X322-1-383128', 6, 1),
SUBSTRING('X322-1-383128', 8, 2),
SUBSTRING('X322-1-383128' ,-4,1),
SUBSTRING('X322-1-383128' ,-2)
) output;
由于您的字符串操作是非常静态的,您还可以使用以下更简单的解决方案:
SELECT 'X322-1-381128' string,
CONCAT(LEFT(REPLACE('X322-1-381128', '-', ''), 8), RIGHT(REPLACE('X322-1-381128', '-', ''), 2))
UNION ALL
SELECT 'X322-1-383128' string,
CONCAT(LEFT(REPLACE('X322-1-383128', '-', ''), 8), RIGHT(REPLACE('X322-1-383128', '-', ''), 2))
我有这些字符串:X322-1-381128
和 X322-1-383128
我需要操作这些字符串以获得输出:
X322138128
和 X322138328
我试过这个解决方案但没有成功,因为输出只是:X322138128
你能帮帮我吗?
mysql> SELECT
'X322-1-381128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
SUBSTRING('X322-1-381128' ,- 3) d,
CONCAT(
SUBSTRING_INDEX('X322-1-381128', '-', 1),
SUBSTRING('X322-1-381128', 6, 1),
SUBSTRING('X322-1-381128', 8, 2),
SUBSTRING('X322-1-381128' ,- 3)
) output,
'X322-1-383128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
SUBSTRING('X322-1-381128' ,- 3) d,
CONCAT(
SUBSTRING_INDEX('X322-1-383128', '-', 1),
SUBSTRING('X322-1-383128', 6, 1),
SUBSTRING('X322-1-383128', 8, 2),
SUBSTRING('X322-1-383128' ,- 3)
) output;
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| string | a | b | c | d | output | string | a | b | c | d | output |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| X322-1-381128 | X322 | 1 | 38 | 128 | X322138128 | X322-1-383128 | X322 | 1 | 38 | 128 | X322138128 |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
1 row in set
使用 替换('X322-1-381128','-')
看起来你最后的 SUBSTRING
是错误的。您要删除所有 -
和倒数第三个数字:
SELECT
'X322-1-381128' string,
SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
SUBSTRING('X322-1-381128', 6, 1) b,
SUBSTRING('X322-1-381128', 8, 2) c,
CONCAT(SUBSTRING('X322-1-381128' ,-4,1), SUBSTRING('X322-1-381128' ,-2)) d,
CONCAT(
SUBSTRING_INDEX('X322-1-381128', '-', 1),
SUBSTRING('X322-1-381128', 6, 1),
SUBSTRING('X322-1-381128', 8, 2),
SUBSTRING('X322-1-381128' ,- 3)
) output,
'X322-1-383128' string,
SUBSTRING_INDEX('X322-1-383128', '-', 1) a,
SUBSTRING('X322-1-383128', 6, 1) b,
SUBSTRING('X322-1-383128', 8, 2) c,
CONCAT(SUBSTRING('X322-1-383128' ,-4,1), SUBSTRING('X322-1-383128' ,-2)) d,
CONCAT(
SUBSTRING_INDEX('X322-1-383128', '-', 1),
SUBSTRING('X322-1-383128', 6, 1),
SUBSTRING('X322-1-383128', 8, 2),
SUBSTRING('X322-1-383128' ,-4,1),
SUBSTRING('X322-1-383128' ,-2)
) output;
由于您的字符串操作是非常静态的,您还可以使用以下更简单的解决方案:
SELECT 'X322-1-381128' string,
CONCAT(LEFT(REPLACE('X322-1-381128', '-', ''), 8), RIGHT(REPLACE('X322-1-381128', '-', ''), 2))
UNION ALL
SELECT 'X322-1-383128' string,
CONCAT(LEFT(REPLACE('X322-1-383128', '-', ''), 8), RIGHT(REPLACE('X322-1-383128', '-', ''), 2))