我有一个表,其中一列是XML代码压缩成一行。因为它是XML,所以我不能做一个charIndex因为有很多'<' '>'在线。
我需要一种从列上的字符串搜索中提取双字母代码的方法。
EX)该列被称为' XMLMessage'并包含:
<p1:UniversalInterchange xmlns:p1="http://www.cargowise.com/Schemas/Native">
<Header xmlns="">
<SenderID/>
<RecipientID/>
</Header>
<Body xmlns="">
<UniversalEvent>
<Event>
<EventType>DEP</EventType>
<EventTime>2016-02-04T13:37:00</EventTime>
<ContextCollection>
<Context>
<Type>MAWBNumber</Type>
<Value>057-23154670</Value>
</Context>
<Context>
<Type>MAWBOriginIATAAirportCode</Type>
<Value>IAD</Value>
</Context>
<Context>
<Type>MAWBDestinationIATAAirportCode</Type>
<Value>TUN</Value>
</Context>
<Context>
<Type>MAWBNumberOfPieces</Type>
<Value>1</Value>
</Context>
<Context>
<Type>OtherServiceInfo</Type>
<Value>
PRD-XPS
</Value>
</Context>
<Context>
<Type>SourceEventCode</Type>
<Value>DEP</Value>
</Context>
<Context>
<Type>NumberOfPieces</Type>
<Value>1</Value>
</Context>
<Context>
<Type>WeightOfGoods</Type>
<Value>2KG</Value>
</Context>
<Context>
<Type>IATACarrierCode</Type>
<Value>AF</Value>
</Context>
<Context>
<Type>FlightNumber</Type>
<Value>1184</Value>
</Context>
<Context>
<Type>FlightDate</Type>
<Value>04-FEB-2016</Value>
</Context>
<Context>
<Type>OriginIATAAirportCode</Type>
<Value>CDG</Value>
</Context>
<Context>
<Type>DestinationIATAAirportCode</Type>
<Value>TUN</Value>
</Context>
<Context>
<Type>TimeOfDeparture</Type>
<Value>2016-02-04T13:37:00</Value>
</Context>
<Context>
<Type>TimeOfArrival</Type>
<Value>2016-02-04T15:40:00</Value>
</Context>
</ContextCollection>
<AdditionalFieldsToUpdateCollection>
<AdditionalFieldsToUpdate>
<Type>JobConsolTransport.JW_ATD</Type>
<Value>2016-02-04T13:37:00</Value>
</AdditionalFieldsToUpdate>
</AdditionalFieldsToUpdateCollection>
</Event>
</UniversalEvent>
</Body>
</p1:UniversalInterchange>
我需要找到&#39; AF&#39;在'IATACarrierCode&#39;之后搜索范围。
我需要一个select语句才能找到&#39; AF&#39;在&#39; IATACarrierCode&#39;之后它之后始终是一个2个字符的字符串。
答案 0 :(得分:0)
如果我正确理解你的问题,我就是这样做的
b flatMap {
x => ev(x) map {_.toString}
}
答案 1 :(得分:0)
SQL Server本身支持XML,没有理由以字符串形式选择字段内容。
假设它是一个XML列:
SELECT c.value('(../Value)[1]', 'varchar(30)')
FROM table
CROSS APPLY table.xmlfield.nodes('(//Context/Type[text()="IATACarrierCode"])[1]') as t(c)
或者它只是一个字符串:
DECLARE @val XML = '<p1:UniversalInterchange...blah blah blah'
SELECT c.value('(../Value)[1]', 'varchar(30)') FROM @val.nodes('(//Context/Type[text()="IATACarrierCode"])[1]') as t(c)
答案 2 :(得分:0)
<a href="http://cdc.gov">CDC</a>
这适用于charindex和substring