У меня есть система, в которой мне нужно получить все сообщения, которые хранятся в шлюзе SMS с именем tg800.
Я разрабатываю это с помощью Spring MVC, запущенного в tomcat.
Я храню все полученные сообщения в таблице с именем
SMS_MESSAGES
CREATE TABLE CWMS_USER.SMS_MESSAGES
(
MESSAGE_ID VARCHAR2(4000 CHAR),
SENDER VARCHAR2(4000 CHAR),
SMSC VARCHAR2(13 CHAR),
PORT_ID VARCHAR2(1 CHAR),
CONTENT VARCHAR2(4000 CHAR),
RECEIVE_TIME VARCHAR2(30 CHAR),
HAS_READ VARCHAR2(3 CHAR),
IS_ASSIGNED_TO_TICKET VARCHAR2(50 CHAR),
ID NUMBER NOT NULL,
MESSAGE_STATUS VARCHAR2(20 CHAR),
TYPE_OF_MESSAGE VARCHAR2(20 CHAR) NOT NULL
)
Я храню все отправленные сообщения в таблице с именем
SMS_REPLY
CREATE TABLE CWMS_USER.SMS_REPLY
(
MESSAGE_ID VARCHAR2(4000 CHAR),
SENDER VARCHAR2(4000 CHAR),
SMSC VARCHAR2(13 CHAR),
PORT_ID VARCHAR2(1 CHAR),
CONTENT VARCHAR2(4000 CHAR),
RECEIVE_TIME VARCHAR2(30 CHAR),
HAS_READ VARCHAR2(3 CHAR),
IS_ASSIGNED_TO_TICKET VARCHAR2(50 CHAR),
ID NUMBER NOT NULL,
MESSAGE_STATUS VARCHAR2(20 CHAR),
TYPE_OF_MESSAGE VARCHAR2(20 CHAR) NOT NULL
)
Когда вы откроете приложение для обмена сообщениями, вы увидите номер, последнее сообщение, дату получения и многое другое. Упорядочено по дате и сгруппировано по номеру. Вот что мне нужно увидеть.
У меня проблема в том, что TG800 хранит числа по-разному.
пример:
в SMS_MESSAGES
номер + 639183478372
в SMS_REPLY
номер 639183478372
Запрос не рассматривает эти два числа как одно, поскольку число в SMS_MESSAGES имеет знак плюс.
У меня нет контроля над тем, как TG800 хранит номер.
Есть ли способ трактовать это как единое целое?
SELECT * FROM((SELECT * FROM SMS_MESSAGES
LEFT JOIN
(SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
ON SMS_MESSAGES.SENDER = foo.CONTACT_NO)
UNION
(SELECT * FROM SMS_REPLY
LEFT JOIN
(SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
ON SMS_REPLY.SENDER = foo.CONTACT_NO)) WHERE (SENDER, RECEIVE_TIME)
IN (SELECT SENDER, MAX(RECEIVE_TIME) FROM ((SELECT * FROM SMS_MESSAGES
LEFT JOIN
(SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
ON SMS_MESSAGES.SENDER = foo.CONTACT_NO)
UNION
(SELECT * FROM SMS_REPLY
LEFT JOIN
(SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
ON SMS_REPLY.SENDER = foo.CONTACT_NO)) GROUP BY SENDER,PORT_ID) ORDER BY RECEIVE_TIME desc
Это запрос, который я использую, он не обрабатывает тот же номер, что и один.
Мне нужно сделать это как единое целое, потому что это одно и то же число. Пожалуйста, помогите мне, пожалуйста.