我的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
可以这样做吗?有人能指出我正确的方向。非常感谢。
答案 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)
使用LEFT
,RIGHT
和SUBSTRING
以及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;