База данных: ПОДСТРОКА до первого вхождения символа

у меня есть строковый тип abc_01, abcd_01, или 02 теперь я хочу подстроку до _ т.е. abc _, abcd_ и т.д. Я использую db2 as400.Please, предлагают обработку через ПРАВИЛЬНУЮ или ЛЕВУЮ функцию

1
задан Konerak 12 July 2010 в 10:56
поделиться

3 ответа

Используйте встроенную функцию POSITION. Формат:

POSITION--(--search-string--IN--source-string--)

или

POSSTR--(--source-string--,--search-string--)

. Я также предлагаю использовать структуру CASE, чтобы проверить, нет ли _ или нет ли он в начале или в конце. Вот пример. Мы предположим, ради примера, что рассматриваемое поле творчески названо FIELD1 и что оно не допускает значений NULL.

SELECT 
  CASE WHEN POSITION('_' IN FIELD1) = 0 THEN FIELD1
       WHEN POSITION('_' IN FIELD1) = 1 THEN ''
       ELSE LEFT(FIELD1, POSITION('_' IN FIELD1)-1) END AS "Left Side",
  CASE WHEN POSITION('_' IN FIELD1) < 1 THEN ''
       WHEN POSITION('_' IN FIELD1) = LENGTH(FIELD1) THEN ''
       ELSE RIGHT(FIELD1, LENGTH(FIELD1)-POSITION('_' IN FIELD1)) END AS "Right Side" 
FROM MYTABLE1

Ваш вопрос требует использования встроенных функций LEFT и RIGHT, что и используется в примере. Что касается правой стороны, я предлагаю, чтобы использование SUBSTRING было проще и читабельнее. Это будет выглядеть так: ПОДСТРОКА (ПОЛЕ1, ПОЛОЖЕНИЕ ('_' В ПОЛЕ1) +1)

1
ответ дан 2 September 2019 в 23:07
поделиться

SELECT SUBSTRING('Hello',0,CHARINDEX('o','Hello',0)) В SQL вернется "Hell". Я не уверен насчет db2 as400, но вы также отметили "SQL". Надеюсь, это поможет

0
ответ дан 2 September 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: