剥离字符

时间:2017-08-22 19:46:13

标签: sql sql-server tsql

我的TSQL非常生疏,我找不到我想要的确切答案,或者它已经超出我的想象。我要求从SSIS中加载的文件名中删除某些字符。我有文件名和负载很好,它只是从文件名/字符串中剥离某些字符。让我们把它称为字符串。

字符串格式:

REPORT-date-XYZ-strip me out-XYZ-BATCH.csv

示例:

REPORT-20170725-XYZ-YOURMYHERO-XYZ-BATCH.csv
REPORT-20170725-XYZ-YOURMYHERO2-XYZ-BATCH.csv

可以这样做吗?有人能指出我正确的方向。非常感谢。

4 个答案:

答案 0 :(得分:1)

以下是使用XML

的一些示例

示例

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values 
 ('REPORT-20170725-XYZ-YOURMYHERO-XYZ-BATCH.csv')
,('REPORT-20170725-XYZ-YOURMYHERO2-XYZ-BATCH.csv')


Select Pos4 = convert(xml,'<x>'+replace([SomeCol],'-','</x><x>')+'</x>').value('/x[4]','varchar(max)')
 From @YourTable

<强>返回

Pos4
YOURMYHERO
YOURMYHERO2

答案 1 :(得分:0)

如果一切都是固定长度和一致的,Substring非常简单,我会用你想要保留的东西建立一个新的字符串,即SUBSTRING(s,1,6)+ SUBSTRING( s,16,10)等... 如果它不一致,你会发现自己做了很多CHARINDEX 找到标记,如连字符。

它很笨拙,但它可以起作用。

答案 2 :(得分:0)

使用LEFTRIGHTSUBSTRING以及Cappelletti's测试数据的另一种方法。

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values 
 ('REPORT-20170725-XYZ-YOURMYHERO-XYZ-BATCH.csv')
,('REPORT-20170725-XYZ-YOURMYHERO2-XYZ-BATCH.csv')

select
    ReturnCol = substring(right(SomeCol,len(someCol) - len(left(SomeCol,20))),1,CHARINDEX('-',right(SomeCol,len(someCol) - len(left(SomeCol,20))))-1)
from
    @YourTable

<强>返回

ReturnCol
-----------
YOURMYHERO
YOURMYHERO2

答案 3 :(得分:0)

一种方法是使用parsename

select
     parsename(replace(txt,'-XYZ-','.'), 3) stripedOut
from
    yourTable;

[SQL Fiddle Demo]