我有一个表,其中有一列包含驱动器中SSIS包的路径。整个文件夹路径都填充在列中。我需要一个SQL查询来获取文件夹路径中字符串的一部分。
列_1中的记录示例。
/FILE ""G:Enterprise_DataPackagesSSIS_Packages_Source_to_Target_Data_Snowflake.dtsx""/CHECKPOINTING OFF /REPORTING E
我感兴趣的只是提取";SSIS_Packages_Source_to_Target_Data_Snowflake";。到目前为止,我所尝试的一切都会出错。我尝试过的最新代码是:
SELECT SUBSTRING(Column_1, LEFT(CHARINDEX('dtsx', Column_1)), LEN(Column_1) - CHARINDEX('dtsx', Column_1)).
我真的很感谢你的帮助。谢谢
- 如果您知道扩展名,并且它不太可能出现在字符串的其他位置,请找到它并截断为它。在
CROSS APPLY
中执行此操作,这样我们就可以多次使用该值 - 然后找到最近的斜线(使用
REVERSE
(,并从那里一直使用SUBSTRING
SELECT
SUBSTRING(Y.[VALUE], LEN(Y.[VALUE]) - PATINDEX('%%', REVERSE(Y.[VALUE])) + 2, LEN(Y.[VALUE]))
FROM (
VALUES ('/FILE ""G:Enterprise_DataPackagesSSIS_Packages_Source_to_Target_Data_Snowflake.dtsx""/CHECKPOINTING OFF /REPORTING E')
) AS X ([Value])
CROSS APPLY (
VALUES (SUBSTRING(X.[Value], 1, PATINDEX('%.dtsx%', X.[Value])-1))
) AS Y ([Value]);
退货:
SSIS_Packages_Source_to_Target_Data_Snowflake
另一种可能的方式是这样。通过不确定它的性能
SELECT vt.[value]
FROM (
VALUES ('/FILE ""G:Enterprise_DataPackagesSSIS_Packages_Source_to_Target_Data_Snowflake.dtsx""/CHECKPOINTING OFF /REPORTING E')
) AS X ([Value])
OUTER APPLY (
SELECT * FROM STRING_SPLIT(x.Value,'')
) vt
WHERE vt.[value] LIKE '%.dtsx'
感谢@Dale K的回复和提供的解决方案。我能够为我的查询复制相同的结果。以下是我在应用基于您的解决方案的字符串操作后,如何在环境中修改查询以仅获取新的字符串列1:
SELECT SUBSTRING(Y.column1,LEN(Y.columl1(-PATINDEX('%%',REVERSE(Y.column1((+2,LENFROM(SELECT column1 FROM CTE1(AS X([column2](交叉应用(从CTE1中选择SUBSTRING(X.column2,1,PATINDEX('%.dtsx%',X.column2(-1(作为Y([column1](
我实际上是在查询CTE表(CTE1(以获得我想要的结果。问题是,我在CTE1中有其他列需要包括在最终的选择查询结果中,当然应该包括来自第1列的字符串操作结果。目前,当我试图在CTE1的最终结果中包括其他列以及上面查询的结果集时,我会遇到错误。最终查询示例:
从CTE1中选择Jobname、job_step、job_date、job_duration、第1列(这将是字符串操作的结果集(;
所以,我目前正在做的不起作用的事情如下:
SELECT C1.Jobname,C1.job_step,C1.job_date,C1.job_duration,Column1 =(SELECT SUBSTRING(Y.column1, LEN(Y.column1) - PATINDEX('%%', REVERSE(Y.column1)) +2, LEN(Y.column1)) FROM (SELECT column1 FROM CTE1) AS X ([column2]) CROSS APPLY (SELECT SUBSTRING(X.column2, 1, PATINDEX('%.dtsx%', X.column2)-1) FROM CTE1) AS Y ([column1])) FROM CTE1 C1
请告诉我,在结果集中有以上所有列的情况下,我如何获得最终结果?非常感谢。