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