获取 SQL 中某个字符之前的所有内容

新手上路,请多包涵

我的数据库中有以下条目:

 E01234-1-1
E01234444-1-800000000

我想修剪条目,所以我得到:

 E01234-1
E01234444-1

所以基本上,我想要第二个’-‘之前的所有内容,无论长度如何

我该如何解决?我正在使用 MS SQL SERVER 2012

我正在使用它,但它只带来第一个连字符之前的数据,而不是第二个连字符

DECLARE @TABLE TABLE (STRING VARCHAR(100))

INSERT INTO @TABLE (STRING)
      SELECT 'E01234-1-1'
UNION ALL SELECT 'E01234-1-200'
UNION ALL SELECT 'E01234-1-3000'
UNION ALL SELECT 'E01234-1-40000'
UNION ALL SELECT 'E01234-1-500000'
UNION ALL SELECT 'E01234-1-6000000'
UNION ALL SELECT 'E01234-1-70000000'
UNION ALL SELECT 'E01234444-1-800000000'

SELECT LEFT(STRING, CHARINDEX('-',STRING)-1) STRIPPED_STRING from @TABLE

E01234 E01234 E01234 E01234 E01234 E01234 E01234 E01234444

原文由 thirty 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 975
2 个回答

如果您需要第二个 -

 SELECT
    LEFT(STRING, CHARINDEX('-', @test, CHARINDEX('-', @test) + 1) -1) STRIPPED_STRING
FROM @TABLE

说明: CHARINDEX 将为您提供 - 的索引 - 执行两次(+ 1)指定 CHARINDEX 应该在第一个之后的位置开始 - 在字符串中。

如果你想在最后一个 - 之后砍掉所有东西(不管它是否是第二个):

 SELECT
    LEFT(STRING, LEN(STRING) - CHARINDEX('-', REVERSE(STRING))) STRIPPED_STRING
FROM @table

这一次,你得到最后一个(反转字符串)的 CHARINDEX - ,然后从整个字符串的长度中减去它。

原文由 Dan Field 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 MySQL,请使用以下内容:

 SELECT SUBSTRING_INDEX(fieldname, '-', 2) FROM tablename

原文由 randomizer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进