在SQL中替换或修剪字符串

时间:2015-10-15 20:19:42

标签: sql string

我非常擅长SQL,但我有一段时间没有这样做。

我有一个带有常见字符串的简单表:

TableName = ExampleTable1
ColumnName = ExampleColumn1

我有一个这样的字符串:

MYSTRING_10_TB_EXAMPLE1
MYSTRING_120_TB_EXAMPLE2

我有这个问题:

select ExampleColumn1, replace(ExampleColumn1,'MYSTRING_', '') from ExampleTable1

这只返回字符串开头的数字:

"10_TB_EXAMPLE1"

我现在需要在整数后的第一个破折号后删除字符串。整数可以是一个数字,也可以是四个或五个,但我需要删除第一个“_”或以“_TB”开头的任何内容,只返回整数。

我知道你可以使用STUFF并替换。我想我需要在''与另一个替换的查询中替换我的第三个参数或者可能正确吗?

我在这里尝试过很多东西,我不能在第一个“_”符号后修剪整个字符串,只留下整数。

3 个答案:

答案 0 :(得分:1)

使用while()功能。 这个查询:

SUBSTRING_INDEX()

将返回SELECT SUBSTRING_INDEX( SUBSTRING_INDEX('MYSTRING_120_TB_EXAMPLE2','_',2), '_', -1);

答案 1 :(得分:0)

您可以将字符串拆分为其部分,并继续您想要的任何内容。试试这样:

DECLARE @tbl TABLE(aString VARCHAR(100));
INSERT INTO @tbl VALUES('MYSTRING_10_TB_EXAMPLE1')
                      ,('MYSTRING_120_TB_EXAMPLE2');

WITH Splitted AS
(
    SELECT CAST('<x>' + REPLACE(aString,'_','</x><x>') + '</x>' AS XML) AS SingleWords
    FROM @tbl
)
SELECT SingleWords.value('x[1]','varchar(max)') AS part1
      ,SingleWords.value('x[2]','int') AS part2
      ,SingleWords.value('x[3]','varchar(max)') AS part3
      ,SingleWords.value('x[4]','varchar(max)') AS part4
FROM Splitted 

/* Result
part1       part2   part3   part4
MYSTRING    10      TB      EXAMPLE1
MYSTRING    120     TB      EXAMPLE2
*/

只是一个简短的解释:下划线被"</x><x>"取代。开头为"<x>",结尾为"</x>",这是XML。每个节点都可以通过索引进行寻址。就是这样......

答案 2 :(得分:0)

使用REPLACE剪掉字符串的第一部分,就像您已经完成的那样。

使用CHARINDEX查找(在结果字符串中)第一个_的位置

然后使用LEFT仅保留字符串的左侧部分(但不包括)第一个_

SELECT
    ExampleColumn1,
    LEFT( REPLACE(ExampleColumn1,'MYSTRING_', ''),  
       CHARINDEX( REPLACE(ExampleColumn1,'MYSTRING_', ''), '_' ) - 1
    )
FROM 
    ExampleTable1

会返回

MYSTRING_10_TB_EXAMPLE1      10
MYSTRING_120_TB_EXAMPLE2     120

如果您使用mySql而非CHARINDEX使用LOCATE

LOCATE( '_', REPLACE(ExampleColumn1,'MYSTRING_', '') ) - 1