如何从单个字符串中提取特定的子字符串?

时间:2018-04-25 19:50:11

标签: sql sql-server

我有一个字符串,我需要拆分代码。

字符串示例 - ' H345678_30',' q789038_155'

要在下划线后提取代码我有一些有用的东西

  Select Code = RIGHT(@temp ,CHARINDEX('_',REVERSE(@temp)) - 1)

我很难提取的代码来自' _'之前的第一部分。 假设我们采用H345678_30',前3个字符总是像H34那样的Precodes,或者在上面提到的另一个例子中它将是Q78。 H34之后的#ss在' _'之前结束。是我需要的。

在这种情况下,它将是5678。

到目前为止,我有这个,但任何建议,以使这项工作更有效,这将是伟大的

Select TCode = LEFT((SUBSTRING(@temp,Charindex('q',@temp)+3,Len(@temp))), (charindex('_', ((SUBSTRING(@temp,Charindex('q',@temp)+3,Len(@temp))))))-1)

谢谢

2 个答案:

答案 0 :(得分:1)

如果前3个字符总是"预编码"然后你可以这样做:

const arrIDCars = ["Car A", "Car B", "Car C", "Car D", "Car E"];
const vehicleIdArr = [1, 1, 2, 3, 2, 1, 2, 3, 3, 2, 1, 2, 3, 2, 1, 1];
const strProfileLinkTextArr = ["p1", "p1", "p2", "p2", "p3", "p3", "p2", "p2", "p1", "p1", "p2", "p2", "p3", "p3", "p2", "p2"];

let output = {};
strProfileLinkTextArr.forEach((text, index) => {
    if (typeof output[text] == "undefined") {
        output[text] = {};
    }

    const vId = vehicleIdArr[index];

    if (typeof output[text][arrIDCars[vId - 1]] == "undefined") {
        output[text] = { ...output[text], [arrIDCars[vId - 1]]: 0 };
    }

    output[text][arrIDCars[vId - 1]]++;
});
console.log(output);

答案 1 :(得分:0)

您可以尝试使用以下代码,我已经捕获了' _'左侧的所有内容。字符然后我删除了前3个字符以获得5678:

model.summary()['number_of_trees'][0]