T-SQL提取两个已知字符之间的字符串

时间:2020-07-15 15:36:05

标签: sql-server string tsql substring

我正在使用MS SQL Server2014。我有一个表,其中包含如下所示的字符串(分配给字段CAR):

ORANGE 1 FORD FIESTA;PETROL
RED 24 FORD MUSTANG; PETROL
BLACK 2 NISSAN JUKE; DIESEL

但是,我需要提取从第二个空间''到第一个半冒号的所有内容;如下所示:

FORD FIESTA
FORD MUSTANG
NISSAN JUKE

这是我的SQL:

SELECT SUBSTRING(CAR, CHARINDEX(' ', CAR) , CHARINDEX(';',CAR) - CHARINDEX(' ', CAR) + Len(';'))
FROM tblStock;

但是,这给了我以下内容:

 1 FORD FIESTA;
24 FORD MUSTANG;
2 NISSAN JUKE;

我要去哪里错了?

2 个答案:

答案 0 :(得分:2)

另一个选择

示例

Declare @YourTable Table ([Car] varchar(50))
Insert Into @YourTable Values 
 ('ORANGE 1 FORD FIESTA;PETROL')
,('RED 24 FORD MUSTANG; PETROL')
,('BLACK 2 NISSAN JUKE; DIESEL')
 
Select A.*
      ,NewValue = stuff(left(Car,charindex(';',Car+';')-1),1,patindex('%[0-9] %',Car+'0'),'')
 From  @YourTable A

返回

Car                            NewValue
ORANGE 1 FORD FIESTA;PETROL    FORD FIESTA
RED 24 FORD MUSTANG; PETROL    FORD MUSTANG
BLACK 2 NISSAN JUKE; DIESEL    NISSAN JUKE

答案 1 :(得分:1)

您正在选择从第一个空格到第一个分号的所有内容。

您可以从“第一个分号”到第一个“后跟数字的空格”中取反的字符串(假设每个记录中都有数字),然后最终取反返回的字符串。

function Loggear({ email, password }) {
  return db.ref("Usuarios")
    .orderByChild("email")
    .equalTo(email)
    .once("value", (snapshot) => {
      console.log(snapshot.val())
      return snapshot.val();
    });
}

请找到db <>提琴here