0

我正在尝试比较两个查询的结果,一个获取从外部向我的 Asterisk 服务器发出的呼叫的呼叫 ID(10 位),另一个获取连接到服务器的呼叫 ID(11 位)。出站呼叫在其号码前附加一个“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 个字符?跳过第一个?显然 a LIKEorRLIKE会有用,但我确实需要维护嵌套查询才能使其正常工作。任何帮助都会很棒。另外,不要注意我对from_unixtimeand的奇怪用法unix_timestamp。我正在尝试确定是否需要以相同格式的时间来进行搜索。不重要。

4

2 回答 2

0

为什么不从您的 dst 字段中删除前导数字?

于 2012-09-08T17:08:00.430 回答
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;
于 2012-09-08T16:58:39.483 回答