Текущее время: Вс, май 05 2024, 00:51

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: select substring in ABAP
СообщениеДобавлено: Чт, июн 02 2005, 09:34 
Гость
Добрый день.

Не подскажете как можно решить такую задачу: есть поле примерно на 15 символов . Мне надо вытащить 6 символов из середины поля в поле selection screen и самое главное сделать выборку из поля таблицы БД и вытащить только эти 6 символов и сопоставить их с переменной назначенной для selection screen. В обычном SQL есть запрос select substring а есть ли что-то подобное в ABAP? И если нет, то что можно сделать в данной ситуации?

Заранее спасибо.
Дмитрий.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Если SELECT ... WHERE SOMEFIELD LIKE '%substr%' не годится, то можешь поиграться с NATIVE SQL.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:55 
Гость
Дело то как раз в том, что с native SQL ничего не выходит. Нет такой команды в ABAP как select substring. И это очень странно.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 09:56 
Модератор
Модератор

Зарегистрирован:
Пт, ноя 12 2004, 11:40
Сообщения: 542
Откуда: Москва
Пол: Мужской
C полями ничего делать в OPEN SQL низя :(
кроме MAX, SUM...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 10:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
2 Slike
Ощущение, что вы путаете OPEN SQL и NATIVE SQL

OPEN:
Code:
SELECT .. FROM ...

ENDSELECT.


NATIVE:
Code:
EXEC SQL.
  select ...
ENDEXEC.


помнится как-то давно пробовал substring в NATIVE - всё было в порядке


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 10:40 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1554
Откуда: Москва
slike написал(а):
Дело то как раз в том, что с native SQL ничего не выходит. Нет такой команды в ABAP как select substring. И это очень странно.


Native SQL на то и Native, что к АВАРу никакого отношения не имеет.
Попробуй, к примеру, написать и сгенерировать

Code:
EXEC SQL.
  ХАЧУ ВЫБРАТЬ КУЧУ ПОЛЕЙ ИЗ КАКОЙ-НИБУДЬ ТАБЛИЦЫ.
ENDEXEC.


И оно сгенерится. При выполнении, правда, в дамп свалится.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 11:01 
Гость
Спасибо. Буду пытаться. :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 15:52 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
С Open SQL простой вариант на ум не приходит.
Можно так (если я правильно понял условие):
Code:
PARAMETER a TYPE char255.

DATA: std(6),
      ch6(6),
      ch255(255),
      itab TYPE TABLE OF char255.

START-OF-SELECTION.

  std = a+1(6).

  SELECT changeuser
    FROM t000
    INTO ch255.

    ch6 = ch255+1(6).

    IF ch6 = std.
      APPEND ch255 TO itab.
    ENDIF.

  ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 16:12 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1554
Откуда: Москва
V® написал:
С Open SQL простой вариант на ум не приходит.
Можно так (если я правильно понял условие):


Тогда уж так:

Code:
PARAMETER a TYPE char255.

DATA: std(8),
          itab TYPE TABLE OF char255.

START-OF-SELECTION.

CONCATENATE '_' a+1(6) '%' INTO std.
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
Code:
PARAMETER a TYPE char255.

DATA: std(8),
          itab TYPE TABLE OF char255.

START-OF-SELECTION.

CONCATENATE '_' a+1(6) '%' INTO std.
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

Согласен, лаконичнее.
Только если брать, скажем с 16го символа, то менее удобно.
А еще в моем случае в имени пользователя (changeuser) часто встречается знак _ и из-за этого like может отрабатывать некорректно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:20 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1554
Откуда: Москва
V® написал:
Согласен, лаконичнее.


Не только лаконичнее, но быстрее - порядков так на... N.
Конкретное значение N зависит от размеров таблицы :-).

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:37 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
111 написал(а):
Не только лаконичнее, но быстрее - порядков так на... N.
Конкретное значение N зависит от размеров таблицы :-).

Согласен, тоже уважаю SQL :)
и select отличный, но есть исключения...

Исходная строка => a = "i_ivanov",
Выбираем подстроку со 2-го по 3й символ => std = '_i'

После выполнения
Code:
CONCATENATE '_' a+1(2) '%' INTO std. "std = '__i%'
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std.

Получаем набор правильных значений
i_ivanov
d_ignatov
...и неправильных
dmitriev
и т.д.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 17:42 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1554
Откуда: Москва
V® написал:
Исходная строка => a = "i_ivanov",
Выбираем подстроку со 2-го по 3й символ => std = '_i'


Эт понятно. Но все равно, мне кажется, лучше уж тогда будет потом пройтись по полученной внутренней таблице и выкосить неправильные записи.
Точнее, сделать
Code:
DELETE ITAB WHERE ...

ИМХО.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 18:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, май 27 2005, 14:20
Сообщения: 310
Пол: Мужской
Code:
DELETE ITAB WHERE ...

а можно полный вариант, без троеточия? :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 02 2005, 18:20 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1554
Откуда: Москва
V® написал:
Code:
DELETE ITAB WHERE ...

а можно полный вариант, без троеточия? :wink:


Да за ради Бога.

Code:
CONCATENATE '_' a+1(2) '%' INTO std. "std = '__i%'
SELECT changeuser INTO TABLE itab
  FROM t000
WHERE changeuser LIKE std. 

DELETE itab WHERE field+1(2) NE a+1(2).


Ну, поле field нужно добавить в itab - да. А что, сложно? :-)

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB