如何使用tSQL匹配并删除字符串后的所有内容?

时间:2018-03-01 12:14:58

标签: tsql

如何使用tSQL查找字符串,如果存在,则返回该字符串之前的所有内容?

即。在下面的示例中,在ETL过程中,我们如何从源中获取列,识别字符串?uniquecode =并因此在sink列的SELECT语句中删除该字符串及其后的所有内容?

Source Column to Sink Column, removing identified match and beyond

如何最好地修改下面的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

1 个答案:

答案 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=%';