首页 > 解决方案 > 在 SQL Server 查询中使用模式和 patindex 函数时如何忽略特定的字符串值?

问题描述

我在这里有这个查询。

WITH Cte_Reverse
AS (
    SELECT CASE PATINDEX('%[^0-9.- ]%', REVERSE(EmailName))
            WHEN 0
                THEN REVERSE(EmailName)
            ELSE left(REVERSE(EmailName), PATINDEX('%[^0-9.- ]%', REVERSE(EmailName)) - 1)
            END AS Platform_Campaign_ID,
            EmailName
    FROM [Arrakis].[xtemp].[Stage_SendJobs_Marketing]
    )
SELECT REVERSE(Platform_Campaign_ID) AS Platform_Campaign_ID, EmailName
FROM Cte_Reverse
WHERE REVERSE(Platform_Campaign_ID) <> '2020'
    AND REVERSE(Platform_Campaign_ID) <> ''
    AND LEN(REVERSE(Platform_Campaign_ID)) = 4;

它大部分都在工作,下面是结果集的屏幕截图。

在此处输入图像描述

我在上面发布的查询从为我要提取的列设置的初始值中提取了右侧的 4 个数字。但是我无法弄清楚当最右边的值是 -v2、-v1 等时,我如何也可以让查询忽略案例。基本上任何带有 -v 的东西以及它是什么数字版本。

标签: sqlsql-servertsqlcommon-table-expression

解决方案


如果你想要四位数字,那么一种方法是:

select substring(emailname, patindex('%[0-9][0-9][0-9][0-9]%', emailname), 4)

推荐阅读