修剪第一个字符以匹配另一个值

时间:2017-12-01 16:23:37

标签: mysql sql

我有一个非常直截了当的查询,除了一个CASE WHEN语句之外还有效。

我选择带有电话号码的记录,并将它们与另一个表格中的数字进行比较。这适用于入站呼叫,但即使我们已经验证了其中许多呼叫存在,出站呼叫也不会被接听。第一个问题是出站呼叫自动有一个' 1'放在前面的地方不要进入。我修剪了a.finallycalledpartyno中的第一个字符,这是我们正在选择的出站号码,但它仍然无效。

我想知道我是不是没有正确使用它,或者是否有更好的方法。受影响的列是VARCHAR(45),如果这有很大的不同。但是,如果我研究记录,我会发现很多在电话号码上显示为入站的,并且出站的完全相同的号码不会被标记为已知,所以我觉得出站号码的格式是唯一的逻辑区别

任何帮助非常感谢。

            SELECT
                Recieved_Known
                , Outbound
                , Outbound_Known

                FROM (
                  SELECT distinct
                   case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as Recieved_Known
                   , CASE WHEN /*ANSWERED = 1 AND*/ LEGTYPE1 = 1 then 'x' ELSE '' end  AS Outbound
                   , case when LEGTYPE1 = 1 and TRIM(leading '1' FROM a.FINALLYCALLEDPARTYNO) = k.phone_number then 'x' ELSE '' end as Outbound_Known

                  FROM session a
                        LEFT JOIN known_numbers k ON a.callingpartyno = k.phone_number
                            WHERE a.ts >= '2017-11-30'
                            and(a.CALLINGPARTYNO in (select extension from users) 
                      OR a.finallycalledpartyno IN (select extension from users))
                      ) x
                      order by extension;

小提琴: http://sqlfiddle.com/#!9/5d5b39/2

1 个答案:

答案 0 :(得分:1)

我不太确定您的TRIM功能有什么问题,但您可以使用以下CASE WHEN语句作为替代:

CASE WHEN LEGTYPE1 = 1 
   and Substring(a.FINALLYCALLEDPARTYNO,2,Len(a.FINALLYCALLEDPARTYNO)) = k.phone_number 
       then 'x' ELSE '' end as Outbound_Known

它应该做你想要达到的目标。