如何使用tSQL查找字符串,如果存在,则返回该字符串之前的所有内容?
即。在下面的示例中,在ETL过程中,我们如何从源中获取列,识别字符串?uniquecode =并因此在sink列的SELECT语句中删除该字符串及其后的所有内容?
如何最好地修改下面的tSQL语句以返回上面SinkPageURL列中的值?
SELECT SourcePageURL FROM ExampleTable
我在这里尝试了一个小提琴 - http://sqlfiddle.com/#!18/3b60a/4使用下面的陈述。它忽略了'uniquecode ='的唯一代码值。虽然不存在,但也留下了'?'符号。需要这个才能与MS SQL Server一起使用' 17。
有点接近,但没有雪茄。帮助赞赏!
SELECT LEFT(SourcePageURL, CHARINDEX('?uniquecode=', SourcePageURL)) FROM sql_test
答案 0 :(得分:3)
尝试此查询:
SELECT
CASE WHEN CHARINDEX('?uniquecode=', SourcePageURL) > 0
THEN SUBSTRING(SourcePageURL,
1,
CHARINDEX('?uniquecode=', SourcePageURL) - 1)
ELSE SourcePageURL END AS new_source
FROM sql_test;
如果您想使用此逻辑更新示例中的源网址,您可以尝试以下操作:
UPDATE sql_test
SET SourcePageURL = SUBSTRING(SourcePageURL,
1,
CHARINDEX('?uniquecode=', SourcePageURL) - 1)
WHERE SourcePageURL LIKE '%?uniquecode=%';