【发布时间】:2018-10-22 19:51:24
【问题描述】:
我正在使用以下查询从表中解析字符串。
SELECT
CASE
WHEN jobdata LIKE '%DocFtpPassword%'
THEN SUBSTRING(jobdata,
CHARINDEX('DefColId=', jobdata) + 9,
CHARINDEX('|DocFtpPassword=', jobdata) - CHARINDEX('DefColId', jobdata) - 9)
ELSE 'No Import Library'
END AS 'Import_Library'
FROM
jobscompleted
然后我想做的是获取每一行并通过另一个表提取另一个值。我知道我可以写两次相同的语句,如,
SELECT
CASE
WHEN jc.jobdata LIKE '%DocFtpPassword%'
THEN SUBSTRING(jc.jobdata,
CHARINDEX('DefColId=', jc.jobdata) + 9,
CHARINDEX('|DocFtpPassword=', jc.jobdata) - CHARINDEX('DefColId', jc.jobdata) - 9)
ELSE NULL
END AS 'Import_Library',
c.collectionname
FROM
jobscompleted jc
JOIN
collection c ON CASE
WHEN jc.jobdata LIKE '%DocFtpPassword%'
THEN SUBSTRING(jc.jobdata,
CHARINDEX('DefColId=', jc.jobdata) + 9,
CHARINDEX('|DocFtpPassword=', jc.jobdata) - CHARINDEX('DefColId', jc.jobdata) - 9)
ELSE NULL
END = c.collectionid
但这显然是超级多余的。有没有办法以更简洁和可读的方式做到这一点,请记住,我对存储过程或变量一无所知(尽管总是有学习的好时机)。
【问题讨论】:
标签: sql-server tsql