Sql 返回字符串的特定部分

Sql 返回字符串的特定部分,sql,string,tsql,Sql,String,Tsql,问题:数字#中的当前输入;瓦尔查尔 例如: 404#;保释令 1#;b采购订单 1046#;该公司的x采购订单 我需要将开头的数字放在一列中,并将字段名称放在#之后;在另一列中 解析将不起作用,因为标题中可能有超过4个单词 如你所见#;是所有输入中的一个共同特征 我希望看到的是: ID Name 404 a purchase order 1 b purchase order 1046 xyz purchase order

问题:数字#中的当前输入;瓦尔查尔

例如: 404#;保释令

1#;b采购订单

1046#;该公司的x采购订单

我需要将开头的数字放在一列中,并将字段名称放在#之后;在另一列中

解析将不起作用,因为标题中可能有超过4个单词

如你所见#;是所有输入中的一个共同特征

我希望看到的是:

ID           Name
404          a purchase order
1            b purchase order
1046         xyz purchase order from this company 
有什么想法吗

我试过了

但这对我来说不起作用

那么:

declare @a varchar(20)
set @a = '123#;gunrin gnre'

SELECT 
    SUBSTRING(@a,0,CHARINDEX('#',@a)) AS ID
    , SUBSTRING(@a,CHARINDEX('#',@a)+2,LEN(@a)-CHARINDEX('#',@a)) AS Name
with Test as (
    select * from (values 
        ('404#;a purchase order'),
        ('1#;b purchase order'),
        ('1046#;xyz purchase order from this company'),
        ('29323982#;evil test 231#;')
    ) tmp(str)        
)
select cast(left(str, idx-1) as int) as ID,
       right(str, len(str)-idx-1)    as Name
from Test t
cross apply (select charindex('#;', t.str) as idx) tmp

-- ID          Name
-- ----------- ------------------------------------------
-- 404         a purchase order
-- 1           b purchase order
-- 1046        xyz purchase order from this company
-- 29323982    evil test 231#;
-- 
-- (4 row(s) affected)
但是请记住,
交叉应用
是特定于MSSQL的。

那么:

with Test as (
    select * from (values 
        ('404#;a purchase order'),
        ('1#;b purchase order'),
        ('1046#;xyz purchase order from this company'),
        ('29323982#;evil test 231#;')
    ) tmp(str)        
)
select cast(left(str, idx-1) as int) as ID,
       right(str, len(str)-idx-1)    as Name
from Test t
cross apply (select charindex('#;', t.str) as idx) tmp

-- ID          Name
-- ----------- ------------------------------------------
-- 404         a purchase order
-- 1           b purchase order
-- 1046        xyz purchase order from this company
-- 29323982    evil test 231#;
-- 
-- (4 row(s) affected)

请记住,
交叉应用
是特定于MSSQL的。

什么版本的SQL Server?什么版本的SQL Server?