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

Posted

技术标签:

【中文标题】数据库:SUBSTRING 直到第一次出现的字符【英文标题】:Database: SUBSTRING upto first occurence of character 【发布时间】:2010-07-12 10:51:13 【问题描述】:

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

【问题讨论】:

【参考方案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】:

http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_bif_substr.htm

【讨论】:

@Soph 它可能有帮助,但它不是 i 上 DB2 的正确链接。当 IBM i(AS/400 或更高版本)是目标平台时,使用 DB2 on i documentation。此链接适用于 i 6.1 上的 DB2。如果您有更高的目标,请使用适用于操作系统版本的信息中心。【参考方案3】:

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

【讨论】:

很遗憾,CHARINDEX() 不是有效的 SQL 函数。它只是 SQL Server 和 Sybase 等少数 DBMS 中的一个扩展。

以上是关于数据库:SUBSTRING 直到第一次出现的字符的主要内容,如果未能解决你的问题,请参考以下文章

js获取字符串最后几位字符数

substr和substring的区别

bzoj2555: SubString sam+lct

JS面试准备二

标记直到下一次出现数据

C#中substring怎么用的