【发布时间】:2010-07-12 10:51:13
【问题描述】:
我有字符串类型 abc_01、abcd_01 或 02 现在我想要子字符串到 _ 即 abc_、abcd_ 等。我正在使用 db2 as400。请建议通过 RIGHT 或 LEFT 函数进行处理
【问题讨论】:
标签: sql db2 ibm-midrange
我有字符串类型 abc_01、abcd_01 或 02 现在我想要子字符串到 _ 即 abc_、abcd_ 等。我正在使用 db2 as400。请建议通过 RIGHT 或 LEFT 函数进行处理
【问题讨论】:
标签: sql db2 ibm-midrange
使用 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)
【讨论】:
【讨论】:
SELECT SUBSTRING('Hello',0,CHARINDEX('o','Hello',0)) 将在 SQL 中返回“地狱”。我不确定 db2 as400,但您也标记了“SQL”。
希望这会有所帮助
【讨论】: