Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用CHARINDEX和SUBSTRING从字符串的括号中获取子字符串_Sql_Sybase - Fatal编程技术网

Sql 使用CHARINDEX和SUBSTRING从字符串的括号中获取子字符串

Sql 使用CHARINDEX和SUBSTRING从字符串的括号中获取子字符串,sql,sybase,Sql,Sybase,我需要的表达式是,由于'-1',命令已中止,但它失败了。但是如果没有这个“-1”,它会给我太多的一个字符 挑选 子字符串M_COMMENT,CHARINDEX'[',M_COMMENT+1,CHARINDEX']',M_COMMENT -来自TRN_EODA_DBF的CHARINDEX'[',M_注释-1 但它和我不懂的“+1”配合得很好 挑选 子字符串M_COMMENT,CHARINDEX'[',M_COMMENT+1,CHARINDEX']',M_COMMENT -来自TRN_EODA_DB

我需要的表达式是,由于'-1',命令已中止,但它失败了。但是如果没有这个“-1”,它会给我太多的一个字符

挑选 子字符串M_COMMENT,CHARINDEX'[',M_COMMENT+1,CHARINDEX']',M_COMMENT -来自TRN_EODA_DBF的CHARINDEX'[',M_注释-1

但它和我不懂的“+1”配合得很好

挑选 子字符串M_COMMENT,CHARINDEX'[',M_COMMENT+1,CHARINDEX']',M_COMMENT -来自TRN_EODA_DBF的CHARINDEX“[”,M_注释+1


感谢您的帮助。

如果您的Sybase版本支持交叉应用,则此方法非常有效:

SELECT
      CASE
            WHEN pos1 > 1 THEN SUBSTRING(M_COMMENT, pos1 + 1, CHARINDEX(']', M_COMMENT) - pos1 - 1)
            END
FROM TRN_EODA_DBF
      CROSS APPLY (
                  SELECT
                        CHARINDEX('[', M_COMMENT)
            ) ca (pos1)
+编辑!哦,天哪,对不起。我键入了交叉连接,但我的意思是交叉申请-非常抱歉

|                 INPUT |        OUTPUT | POS1 |
|-----------------------|---------------|------|
| admin@[sqlfiddle.com] | sqlfiddle.com |    7 |
|            @sqlfiddle |        (null) |    0 |
|         @jake[feasel] |        feasel |    6 |
范例

SELECT
       M_COMMENT as input
     , CASE
            WHEN pos1 > 1 THEN SUBSTRING(M_COMMENT, pos1 + 1, CHARINDEX(']', M_COMMENT) - pos1 - 1)
            END
       AS output
     , pos1
FROM TRN_EODA_DBF
      CROSS APPLY (
                  SELECT
                        CHARINDEX('[', M_COMMENT)
            ) ca (pos1)
如果没有交叉应用,您可以执行相同的操作,但您可以重复使用charindex:

SELECT
       M_COMMENT as input
     , CASE
            WHEN CHARINDEX('[', M_COMMENT) > 1 THEN SUBSTRING(M_COMMENT, CHARINDEX('[', M_COMMENT) + 1, CHARINDEX(']', M_COMMENT) - CHARINDEX('[', M_COMMENT) - 1)
            END
       AS output
FROM TRN_EODA_DBF

谢谢,我会试试这个。顺便说一句,我发现了这篇非常详细的帖子,解释了我为什么会有这个错误消息:

它表示:此错误是由于将负值传递给子字符串、左字符串和右字符串函数的长度参数而导致的。这通常与CHARINDEX函数一起发生,其中在字符串中搜索的字符未找到,并且从CHARINDEX函数的结果中减去1


这就是这里发生的情况。

M_COMMENT中的值是什么样子的?我猜可能有一行没有[]。您好,您好,您是对的,问题是由于没有[]的行造成的。