数据库:SUBSTRING直到第一次出现的字符

时间:2010-07-12 10:51:14

标签: sql db2 ibm-midrange

我有字符串类型abc_01,abcd_01或02现在我想要子串到_即abc_,abcd_等我使用db2 as400。请通过右或左函数建议处理

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分: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

您的问题要求使用LEFT和RIGHT内置函数,这就是示例使用的内容。对于右侧,我建议使用SUBSTRING更容易,更易读。它看起来像这样:SUBSTRING(FIELD1,POSITION('_''IN FIELD1)+1)

答案 2 :(得分:0)

SELECT SUBSTRING('Hello',0,CHARINDEX('o','Hello',0))将在SQL中返回“Hell”。我不确定db2 as400,但你也标记了“SQL”。 希望这有帮助