2015-01-27 2 views
-1

У меня есть 48/50 г в базе данных as400, и я хочу (запросить) substr перед «/» и до промежутка между 50 и g.запрос для DB2 for IBM i (AS400) substr

Результат я должен получить 50

Я ищу часов в настоящее время и не попробовать и попробовать, но не повезло.

любая помощь приветствуется.

Спасибо!

+0

Используйте 'POSITION', чтобы найти символы '/' и пробел. например 'POSITION (FIELDA, '/')' вернет позицию символа '/'. Затем вы можете использовать эти позиции для создания соответствующего оператора 'SUBSTRING'. –

+1

'AS/400' является устаревшим именем. Текущее имя - IBM i, и это поможет при поиске текущей информации. Центр знаний IBM i находится по адресу http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i/welcome. Вот ссылка на SQL SQL: http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72 /db2/rbafzintro.htm –

+0

Спасибо, Бак, ты совершенно прав, я такая старая школа! – user2844413

ответ

4

Вы хотите использовать функцию LOCATE() ...
Если предположить, что первое пространство является тот, который вы хотите, следующие будут работать:

--create variable mystr char(10) default('48/50 g') 
select substr(mystr     
       , locate('/'   
         , mystr) + 1 
       , locate(' '   
         , mystr)  
       - (locate('/'  
          , mystr) + 1) 
      )      
from sysibm.sysdummy1    

Однако, если это часто требуется функция. Рассмотрим создание пользовательской функции (UDF), которая будет анализировать и разделять строку таким образом.

+1

Возможно, потребуется небольшое редактирование с добавлением «-1» после последнего LOCATE(). Как закодировано, результатом являются три символа «50_», включая конечный пробел. В противном случае это хорошо. – user2338816

+0

@ user2338816, вы правы, я отредактировал свой ответ. – Charles

+0

Я просто понимаю, что у меня есть два пробела в строке: один в начале и один между 50 и G. Как я могу удалить первое пространство, чтобы найти и подстроку? – user2844413