2010-07-12 4 views

ответ

1

Используйте встроенную функцию 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 

Ваш вопрос просил использовать влево и вправо, встроенные функции, так это то, что в данном примере используется. Для правой стороны я предлагаю, чтобы использование SUBSTRING было проще и понятнее. Это будет выглядеть так: SUBSTRING (FIELD1, POSITION ('_' IN FIELD1) +1)

1
+0

благодаря этой ссылке помог мне – Soph

+0

@Soph Возможно, это помогло, но это не правильная ссылка для DB2 on i. Используйте [DB2 on i documentation] (http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_61/rzahg/rzahgdb.htm?lang=en), когда целью является IBM i (AS/400 или более поздняя версия) Платформа. Эта ссылка предназначена для DB2 on i 6.1. Используйте соответствующий информационный центр для версии ОС, если у вас есть более поздняя цель. – user2338816

0

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

+0

Просто попробовал это на DB2 AS400, и он не работает. – Soph

+0

К сожалению, CHARINDEX() не является допустимой функцией SQL. Это всего лишь расширение в нескольких СУБД, таких как SQL Server и Sybase. – user2338816

Смежные вопросы