Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Проблема с LIKE в подзапросе  [new]
PSD
Member

Откуда:
Сообщений: 49
База DB2

Мне нужно определить есть ли адрес оправителя письма в справочнике , проблема в том что в справонике адрес чистый name@mai.ru, а в входящих сообщениях может быть с мусором попробовал сделать через like
SELECT  * FROM maximo.INBOUNDCOMM INBOUNDCOMM  WHERE  NOT exists ( SELECT 1 FROM maximo.Email e 
WHERE INBOUNDCOMM.EMAILADDRESS  LIKE '%' || e.EMAILADDRESS ||'%' )



получил:

SQL Error [42824]: Неверный предикат LIKE или скалярная функция POSSTR - первый операнд не является строчным выражением или второй операнд не является строкой. Неверная скалярная функция LOCATE или POSITION - первый операнд не является строкой или второй операнд не является строчным выражением.. SQLCODE=-132, SQLSTATE=42824, DRIVER=3.72.24
com.ibm.db2.jcc.am.SqlSyntaxErrorException: Неверный предикат LIKE или скалярная функция POSSTR - первый операнд не является строчным выражением или второй операнд не является строкой. Неверная скалярная функция LOCATE или POSITION - первый операнд не является строкой или второй операнд не является строчным выражением.. SQLCODE=-132, SQLSTATE=42824, DRIVER=3.72.24

??????
Типы полей совпадают , пробовал даже с привинием через каст
22 июн 18, 16:48    [21513787]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
Guzya
Member

Откуда:
Сообщений: 317
Возможно скажу глупость, но может в скобки взять

WHERE INBOUNDCOMM.EMAILADDRESS  LIKE ('%' || e.EMAILADDRESS ||'%') )
22 июн 18, 17:10    [21513853]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4819
PSD,

Какая именно версия DB2 и платформа?

На моей DB2 10.5 for Linux, Unix and Windows работает:
with 
  i (EMAILADDRESS) as (values 'start name@mail.ru end', 'start name2@mail.ru end')
, e (EMAILADDRESS) as (values 'name@mail.ru')
SELECT  * 
FROM i
WHERE NOT exists (SELECT 1 FROM e WHERE i.EMAILADDRESS  LIKE '%' || e.EMAILADDRESS ||'%' );
22 июн 18, 21:49    [21514417]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
mustaccio
Member

Откуда: Москва -> Торонто
Сообщений: 494
PSD,

Какой тип у поля e.EMAILADDRESS?
24 июн 18, 17:36    [21516810]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
PSD
Member

Откуда:
Сообщений: 49
Mark Barinstein
PSD,

Какая именно версия DB2 и платформа?

На моей DB2 10.5 for Linux, Unix and Windows работает:
with 
  i (EMAILADDRESS) as (values 'start name@mail.ru end', 'start name2@mail.ru end')
, e (EMAILADDRESS) as (values 'name@mail.ru')
SELECT  * 
FROM i
WHERE NOT exists (SELECT 1 FROM e WHERE i.EMAILADDRESS  LIKE '%' || e.EMAILADDRESS ||'%' );


Версия базы DB2 v9.5.301.436
Твой запрос дает туже ошибку.
25 июн 18, 11:35    [21518070]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
PSD
Member

Откуда:
Сообщений: 49
mustaccio
PSD,

Какой тип у поля e.EMAILADDRESS?


INBOUNDCOMM.EMAILADDRESS VARGRAPHIC (40)
email.EMAILADDRESS VARGRAPHIC (100)
25 июн 18, 11:38    [21518081]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с LIKE в подзапросе  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4819
PSD
Версия базы DB2 v9.5.301.436
Твой запрос дает туже ошибку.
В 9.5 в LIKE predicate действительно есть такое ограничение, что pattern-expression не может содержать, как начиная с 9.7:

The expression can be specified by:

  • A constant
  • A special register
  • A variable
  • A scalar function
  • A large object locator
  • A column name
  • An expression concatenating any of the above
  • 25 июн 18, 13:50    [21518555]     Ответить | Цитировать Сообщить модератору
    Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить