用于在文件夹路径中选择特定字符串的SQL查询



我有一个表,其中有一列包含驱动器中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)).

我真的很感谢你的帮助。谢谢

  1. 如果您知道扩展名,并且它不太可能出现在字符串的其他位置,请找到它并截断为它。在CROSS APPLY中执行此操作,这样我们就可以多次使用该值
  2. 然后找到最近的斜线(使用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

请告诉我,在结果集中有以上所有列的情况下,我如何获得最终结果?非常感谢。

最新更新