SQL从另一个字符串列中减去字符串列

时间:2018-03-02 11:35:47

标签: sql sql-server

我希望从另一个字符串列中减去两个字符串列。

我过去在Oracle中使用以下

实现了这一点
SELECT
C.MANUFACTURER,
C.MODEL_GROUP,
REGEXP_REPLACE(C.VARIANT, '^'||C.MANUFACTURER || ' +' || C.MODEL_GROUP) "VAR DESC",
C.VARIANT
FROM STD_BI.RL2_CONTRACTS_VW C

我现在需要在MS SQL中实现相同的任何建议。

3 个答案:

答案 0 :(得分:0)

“减去”在这里肯定是用词不当。 OP似乎想要删除另一个字符串开头的字符串。

从现在开始,我假设MANUFACTURERMODEL_GROUP不包含任何正则表达式通配符。

多个空间存在挑战。如果没有太多,那么你可以做到。例如,它处理一个或两个空格:

SELECT C.MANUFACTURER, C.MODEL_GROUP,
       (CASE WHEN C.VARIANT LIKE C.MANUFACTURER + ' ' + C.MODEL_GROUP + '%'
             THEN STUFF(C.VARIANT, 1, LEN(C.MANUFACTURER + ' ' + C.MODEL_GROUP), '')
             WHEN C.VARIANT LIKE C.MANUFACTURER + '  ' + C.MODEL_GROUP + '%' AND
             THEN STUFF(C.VARIANT, 1, LEN(C.MANUFACTURER + '  ' + C.MODEL_GROUP), '')
             ELSE C.VARIANT
        END) as [VAR DESC],
       C.VARIANT
FROM STD_BI.RL2_CONTRACTS_VW C;

编辑:

这是一个更完整的解决方案:

SELECT C.MANUFACTURER, C.MODEL_GROUP,
       (CASE WHEN C.VARIANT LIKE C.MANUFACTURER + ' %' + C.MODEL_GROUP + '%' AND
                  C.VARIANT NOT LIKE C.MANUFACTURER + ' %[^ ]%' + C.MODEL_GROUP + '%'

             THEN STUFF(LTRIM(STUFF(C.VARIANT, 1, LEN(C.MANUFACTURER), '')), 1, LEN(C.MODEL_GROUP), '')
             ELSE C.VARIANT
        END) as [VAR DESC],
       C.VARIANT
FROM STD_BI.RL2_CONTRACTS_VW C;

这只测试两个字符串之间的空格(not like正在检查空格以外的其他内容)。然后更换为三个步骤 - 删除制造商,然后删除空格,然后删除模型组。

答案 1 :(得分:0)

我已经花了一些时间在这个上,为了我自己的满意,除了上面的答案,我还提出了以下内容,这也产生了正确的答案。

SUBSTRING(FV.VARIANT, LEN(FV.MANUFACTURER + ' ' + FV.MODEL_RANGE + ' ') + 1 , LEN(FV.VARIANT))

答案 2 :(得分:0)

我的问题有点容易解决,我只需要从某些行的列开头删除“ xxxx”(前4个字符):

更新coluna SET columToEdit = SUBSTRING(columToEdit,5,200);