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

时间:2016-02-19 13:45:54

标签: sql sql-server tsql

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

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

RETURNS E01234 E01234 E01234 E01234 E01234 E01234 E01234 E01234444

3 个答案:

答案 0 :(得分:4)

如果您需要第二个-

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

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

如果您希望在最后-之后切断所有内容(无论是否为秒):

-

这一次,你得到最后一个SELECT LEFT(STRING, LEN(STRING) - CHARINDEX('-', REVERSE(STRING))) STRIPPED_STRING FROM @table (反向字符串)CHARINDEX,并从整个字符串的长度中减去它。

答案 1 :(得分:3)

试试这个:

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

答案 2 :(得分:1)

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

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