我正在尝试比较两个查询的结果,一个获取外部(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个字符?要跳过第一个?显然LIKE
或RLIKE
会很有用,但我确实需要维护嵌套查询才能生效。任何帮助都会很棒。另外,不要理会我对from_unixtime
和unix_timestamp
的奇怪使用。我正在尝试弄清楚我是否需要以相同格式进行搜索才能工作。不重要。
答案 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字段中的前导数字?