у меня есть строковый тип abc_01, abcd_01, или 02 теперь я хочу подстроку до _ т.е. abc _, abcd_ и т.д. Я использую db2 as400.Please, предлагают обработку через ПРАВИЛЬНУЮ или ЛЕВУЮ функцию
Используйте встроенную функцию 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)
SELECT SUBSTRING('Hello',0,CHARINDEX('o','Hello',0))
В SQL вернется "Hell". Я не уверен насчет db2 as400, но вы также отметили "SQL".
Надеюсь, это поможет