0

所以这是我的代码:

SELECT d.Args, c.Entered
FROM MailServer.dbo.Messages2Send d (NOLOCK)
INNER JOIN MailServer.dbo.ClickLog c (nolock) ON d.id = c.eMsgID
    where d.Date2Send >= '07/19/2013'
    and d.MessageTemplateNameRaw = 'Email.htm'
    and d.Destination NOT LIKE '%@company.com' and d.Destination NOT LIKE '%test%'
    ORDER BY d.Date2Send DESC

输出样本:

Args:
pSendInfo=VJ_13710731_V_000003295572
pSendInfo=VJ_13563134_V_000002649396
pSendInfo=VJ_13746113_V_000003553672
pSendInfo=VJ_13894398_V_000004219019
pSendInfo=VJ_13839988_V_000003968856

我的问题是如何获取第二个下划线 _ 之后的所有内容以获得所需的输出。例如,而不是... pSendInfo=VJ_13710731_V_000003295572

我只是想让它显示... V_000003295572

提前致谢。

4

1 回答 1

0

试一试(假设' _ V _ '是一个不变的特征)

   select RIGHT( args, LEN(args)-CHARINDEX('_V_', args)-3)

编辑

如何将索引传递给第一个对 charindex 的另一个调用以找到第二个“_”

   select RIGHT(args, LEN(args)- ( CHARINDEX('_', args, CHARINDEX('_', args)+1)))

此处来自 TechNet 的 CharIndex 定义。

   CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

论据

  • expressionToFind
    是一个字符表达式,包含要查找的序列。expressionToFind 限制为 8000 个字符。
  • expressionToSearch
    是要搜索的字符表达式。
  • start_location
    是开始搜索的整数或 bigint 表达式。如果 start_location 未指定、为负数或为 0,则搜索从 expressionToSearch 的开头开始。

基本上按照处理顺序,我们使用 charindex(第 2 次调用CHARINDEX('_', args))找到第一个下划线位置的值,加上一个并使用 charindex 的最后一个参数(第 1 次调用)的新索引来start_location找到第二个下划线的长度从开始到第二个下划线的字符串,这是从整个字符串长度中减去的,然后你得到字符串长度的剩余部分,然后按长度返回该字符串的正确部分。

于 2013-11-14T19:02:00.333 回答