MySQL模式匹配与字符异常

时间:2012-09-08 16:41:43

标签: mysql pattern-matching

我正在尝试比较两个查询的结果,一个获取外部(10位)对我的Asterisk服务器的呼叫的呼叫ID,另一个获取连接到服务器的FROM(11位)的呼叫ID。出站呼叫在其号码前面加上“1”。目前我正在使用如下声明:

select data2, from_unixtime(time_id) day from queuemetrics.queue_log
where time_id > '1346475600' and (data2, time_id) in
(select dst, unix_timestamp(calldate) from asteriskcdrdb.cdr
where calldate > '2012-09-01' and lastdata like <blocked for privacy>)
order by day;

data2是包含10位数字的列,dst包含11位数字。有没有办法可以模式匹配列的第2-11个字符?要跳过第一个?显然LIKERLIKE会很有用,但我确实需要维护嵌套查询才能生效。任何帮助都会很棒。另外,不要理会我对from_unixtimeunix_timestamp的奇怪使用。我正在尝试弄清楚我是否需​​要以相同格式进行搜索才能工作。不重要。

2 个答案:

答案 0 :(得分:0)

您可以使用RIGHT提取字符串中最右侧的字符:

RIGHT(your_field_here, 10);

如果您想在字符串的开头和结尾处忽略某些字符,那么您可以使用SUBSTR

SUBSTR(your_field_here, 2, 10);

您的查询将是:

SELECT data2, FROM_UNIXTIME(time_id) day FROM queuemetrics.queue_log
WHERE time_id > '1346475600' AND (data2, time_id) IN
(SELECT SUBSTR(dst, 2, 10), UNIX_TIMESTAMP(calldate) FROM asteriskcdrdb.cdr
WHERE calldate > '2012-09-01' AND lastdata LIKE <blocked for privacy>)
ORDER BY day;

答案 1 :(得分:0)

为什么不修剪dst字段中的前导数字?