子串的动态起始位置和动态长度

问题描述 投票:0回答:1

我的代码大部分都按预期工作。然而,它最后返回的字符太多了。我尝试添加 -1,但出现越界错误。我做错了什么?

SELECT
  SUBSTR(
    t.variable, 
    INSTR(t.variable, '*', 1, 2) + 1, 
    INSTR(t.variable, '*', 1, 3) - INSTR(t.variable, '*', 1, 2)
  ) 
FROM test t;

我尝试过-1、+1。 -1 给我一个出站错误,+1 添加一个额外的字符。

样本值:

XBR*jkhehj8f22*3012367134*CVHI*N* X*G*P
sql substring instr
1个回答
0
投票

你把

-1
放在哪里了?把它放在正确的地方,这似乎有效:

SELECT
  SUBSTR(
    t.variable, 
    INSTR(t.variable, '*', 1, 2) + 1, 
    INSTR(t.variable, '*', 1, 3) - INSTR(t.variable, '*', 1, 2) -1
  ) 
FROM test t;

在这里查看:

https://dbfiddle.uk/mXkc0JXb

但最重要的是,我的建议是修复架构,因为像这样的列中的分隔数据通常确实是破碎的设计。这需要一个额外的表(可能)有 9 列:一列用于此表中的 ID,一列用于此列中每个

*
分隔的字段。

© www.soinside.com 2019 - 2024. All rights reserved.