SQL中的字符串需要根据清除的关键字和清除
进行拆分Paper Industry cleared by SBI
Chemical Industry cleared by HDFC
SBI clearing for automobile Industry
ICICI clearing for textile industry
我需要根据清除的关键字拆分上面的字符串并清除以获得2列的输出
Output
Company Name | Clearer
------------------------------------------
Paper Industry | SBI
Chemical Industry | HDFC
automobile Industry | SBI
textile industry | ICICI
获得2列公司名称和更清晰。
分割它并在SQL中获取表值结果的最佳方法是什么。
SQL查询会有所帮助。
答案 0 :(得分:3)
哎哟。你只需要凌乱的代码:
select t.*,
(case when col like '% cleared by %'
then left(col, charindex(' cleared by ', col))
else stuff(col, 1, charindex(' clearing for ', col) + 13, '')
end) as company_name,
(case when col like '% cleared by %'
then stuff(col, 1, charindex(' cleared by ', col) + 11, '')
else left(col, charindex(' clearing for ', col))
end) as clearer
from t;
Here是一个SQL小提琴。
答案 1 :(得分:1)
我会将class EmptyAbstractClass(NonEmptyABC):
pass
class NonemptyAbstractClass(NonEmptyABC):
@abc.abstractmethod
def foo(self):
pass
class NonemptyChild(NonemptyAbstractClass):
def foo(self):
pass
NonemptyChild() # works because "foo" is an abstractmethod
EmptyAbstractClass() # throws TypeError because there are no abstractmethods
与subsring()
函数一起使用:
left()
答案 2 :(得分:0)
这也可以。 希望这有用:)
SELECT
CASE
WHEN [Left] LIKE '%industry'
THEN [Left]
ELSE [Right]
END [Company Name]
,CASE
WHEN [Left] NOT LIKE '%industry'
THEN [Left]
ELSE [Right]
END [Clearer]
FROM
(
SELECT
CASE
WHEN CHARINDEX(' cleared by ', Col) > 0
THEN LTRIM(RTRIM(LEFT(Col, CHARINDEX(' cleared by ', Col))))
WHEN CHARINDEX(' clearing for ', Col) > 0
THEN LTRIM(RTRIM(LEFT(Col, CHARINDEX(' clearing for ', Col))))
END [Left]
,CASE
WHEN CHARINDEX(' cleared by ', Col) > 0
THEN LTRIM(RTRIM(SUBSTRING(Col, CHARINDEX(' cleared by ', Col)+LEN(' cleared by '), LEN(Col))))
WHEN CHARINDEX(' clearing for ', Col) > 0
THEN LTRIM(RTRIM(SUBSTRING(Col, CHARINDEX(' clearing for ', Col)+LEN(' clearing for '), LEN(Col))))
END [Right]
FROM table_name
) T
答案 3 :(得分:0)
使用与XML Cross
一起使用的小XML的另一个选项示例强>
Declare @YourTable Table (id int,[SomeCol] varchar(50))
Insert Into @YourTable Values
(1,'Paper Industry cleared by SBI')
,(2,'Chemical Industry cleared by HDFC')
,(3,'SBI clearing for automobile Industry')
,(4,'ICICI clearing for textile industry')
Select CompanyName = XMLData.value('x[1]/@name','varchar(max)')
,Clearer = XMLData.value('x[1]/@code','varchar(max)')
From @YourTable A
Cross Apply ( values ( convert(xml,case when charindex('cleared by',SomeCol)>0
then '<x name="'+replace(SomeCol,' cleared by ' ,'" code="')+'"/>'
else '<x code="'+replace(SomeCol,' clearing for ','" name="')+'"/>'
end) )
) B(XMLData)
<强>返回强>
CompanyName Clearer
Paper Industry SBI
Chemical Industry HDFC
automobile Industry SBI
textile industry ICICI
编辑 - 只是为了好玩,如果来源是一个多行字符串
Declare @S varchar(max) ='Paper Industry cleared by SBI
Chemical Industry cleared by HDFC
SBI clearing for automobile Industry
ICICI clearing for textile industry'
Select CompanyName = XMLData.value('x[1]/@name','varchar(max)')
,Clearer = XMLData.value('x[1]/@code','varchar(max)')
From (
Select RetVal = B.i.value('(./text())[1]', 'varchar(max)')
From (Select x = Cast('<x>' + replace(@S,char(13)+char(10),'</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) A
Cross Apply ( values ( convert(xml,case when charindex('cleared by',RetVal)>0
then '<x name="'+replace(RetVal,' cleared by ' ,'" code="')+'"/>'
else '<x code="'+replace(RetVal,' clearing for ','" name="')+'"/>'
end ) )
) B(XMLData)