问题:数字#中的当前输入; VARCHAR
例如: 404#;购买订单
1#; b采购订单
1046#; x y x来自该公司的采购订单
我需要将开头的数字放在一列中,并在#后面加上字段的名称;在另一列。
Parse不起作用,因为标题中可能有超过4个单词
你可以看到#;是所有输入中的常见功能。
我希望看到的是:
ID Name
404 a purchase order
1 b purchase order
1046 xyz purchase order from this company
有什么想法吗?
我尝试了How do I split a string so I can access item x?
但这对我不起作用
答案 0 :(得分:3)
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
答案 1 :(得分:1)
Declare @Sample NVARCHAR(100)
SET @Sample = '1046#;x y x purchase order from this company'
SELECT SUBSTRING(@Sample, 1, CHARINDEX('#;', @Sample)-1), SUBSTRING(@Sample, CHARINDEX('#;', @Sample)+2,LEN(@Sample) )
答案 2 :(得分:0)
怎么样:
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)
请记住,cross apply
是特定于MSSQL的。