【问题标题】:Get everything before a certain character in SQL获取 SQL 中某个字符之前的所有内容
【发布时间】:2016-06-01 02:49:08
【问题描述】:

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

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

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

如果你需要第二个-:

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,然后从整个字符串的长度中减去它。

【讨论】:

    【解决方案2】:

    试试这个:

    DECLARE @STR NVARCHAR(MAX) = 'E01234444-1-800000000';
    SELECT LEFT(@STR, CHARINDEX('-', @STR, CHARINDEX('-', @STR)) - 1)
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • SQL Server 没有SUBSTRING_INDEX
      • (在此张贴者的辩护中,发布此帖子时此帖子上的唯一标签是[sql] 标签。也许只是提到这适用于MySQL?)
      猜你喜欢
      • 2019-02-17
      • 2012-06-16
      • 2020-12-06
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2020-10-06
      • 1970-01-01
      相关资源
      最近更新 更多