PatIndex()匹配选择子字符串

时间:2019-02-18 17:12:23

标签: sql-server substring

我试图形成正确的IfCase statement以仅在Substring函数中有匹配项时选择PatIndex()

以下查询部分起作用。问题是PatIndex()中没有匹配项,它返回0,然后substring函数从返回的每个其他URL返回第3列开始的4个字符。我想跳过这些与模式不匹配的URL。 我尝试过

Case PatIndex('%ID=%',URL) > 1

但是我在'>'附近收到语法错误,不确定为什么。

select distinct Url, Username, substring(Url, (PatIndex('%ID=%', Url)+3), 4) as RID 
from tblWebSiteUsage
where dateandtime > '2-16-2018 12:00:00 am'

3 个答案:

答案 0 :(得分:0)

您只能使用WHERE子句过滤具有URL的{​​{1}}:

ID=

答案 1 :(得分:0)

您更新后的查询以获取仅包含字符串“ ID =”的URL。

select distinct Url, Username, substring(Url, (PatIndex('%ID=%', Url)+3), 4) as RID 
from tblWebSiteUsage
where dateandtime > '2-16-2018 12:00:00 am' and Url like '%ID=%'

答案 2 :(得分:0)

此case语句应在从网址中提取ID之前检查是否存在模式匹配,如果网址中没有ID =,则返回null

select 
    distinct Url, 
    Username,
    case when PatIndex('%ID=%', Url) > 0 
         then substring(Url, (PatIndex('%ID=%', Url)+3), 4) 
         else null
    end as RID 
from tblWebSiteUsage
where dateandtime > '2-16-2018 12:00:00 am'`