使用 T-SQL 从列中提取第一个 argue
Extract first argue from column with T-SQL
我需要从以下字符串中提取第一个参数:"\PATH\TO\PACKAGE"
:
/SQL "\PATH\TO\PACKAGE" /SERVER "0.0.0.0,0000" /USER usr /PASSWORD "passw" /DECRYPT pass2 /CHECKPOINTING OFF /REPORTING E
这是存储在 SQL 服务器 msdb.sysjobsteps.command
的列
有没有办法通过使用正则表达式或用空格分割来实现?
基于我们的 one 示例,几个 CHARINDEX
s 一些简单的字符串操作就可以完成工作:
DECLARE @YourString nvarchar(500) = N'/SQL "\PATH\TO\PACKAGE" /SERVER "0.0.0.0,0000" /USER usr /PASSWORD "passw" /DECRYPT pass2 /CHECKPOINTING OFF /REPORTING E';
SELECT LEFT(STUFF(V.YourString,1,CI1.I,''),CI2.I-CI1.I-1)
FROM (VALUES(@YourString))V(YourString)
CROSS APPLY(VALUES(CHARINDEX(' ',V.YourString)))CI1(I)
CROSS APPLY(VALUES(CHARINDEX(' /',V.YourString,CI1.I)))CI2(I);
如果参数不改变位置,那么您可以构建更稳健的解决方案。
我需要从以下字符串中提取第一个参数:"\PATH\TO\PACKAGE"
:
/SQL "\PATH\TO\PACKAGE" /SERVER "0.0.0.0,0000" /USER usr /PASSWORD "passw" /DECRYPT pass2 /CHECKPOINTING OFF /REPORTING E
这是存储在 SQL 服务器 msdb.sysjobsteps.command
有没有办法通过使用正则表达式或用空格分割来实现?
基于我们的 one 示例,几个 CHARINDEX
s 一些简单的字符串操作就可以完成工作:
DECLARE @YourString nvarchar(500) = N'/SQL "\PATH\TO\PACKAGE" /SERVER "0.0.0.0,0000" /USER usr /PASSWORD "passw" /DECRYPT pass2 /CHECKPOINTING OFF /REPORTING E';
SELECT LEFT(STUFF(V.YourString,1,CI1.I,''),CI2.I-CI1.I-1)
FROM (VALUES(@YourString))V(YourString)
CROSS APPLY(VALUES(CHARINDEX(' ',V.YourString)))CI1(I)
CROSS APPLY(VALUES(CHARINDEX(' /',V.YourString,CI1.I)))CI2(I);
如果参数不改变位置,那么您可以构建更稳健的解决方案。