请帮助我如何在SQL Server中获取特定字符。
为:
规则:
数据样本:
eNodeB Function Name=SMD085ML1_CIMANGLID, Local Cell ID=21, Cell Name=C_SMD085ML1_CIMANGLIDML2, eNodeB ID=160085, Cell FDD TDD indication=CELL_FDD
eNodeB Function Name=CRB325ML_KEJAKSAANCRB, Local Cell ID=31, Cell Name=CRB325ML_KEJAKSAANCRBML3, eNodeB ID=154325, Cell FDD TDD indication=CELL_FDD
eNodeB Function Name=CRB612ML_PILANGSARI, Local Cell ID=31, Cell Name=CRB612ML_PILANGSARIML3, eNodeB ID=154612, Cell FDD TDD indication=CELL_FDD
感谢您的关注
答案 0 :(得分:2)
您可以使用CHARINDEX查找给定字符串中特定字符的位置 您可以使用SUBSTRING函数来获取所需长度的字符串值
请检查以下语法
declare @str varchar(100) = 'aerwagf=werweyyqasdwe3289afa'
select SUBSTRING(@str, CHARINDEX('=', @str)+1, 6)
对于两个特定字符之间的文本,您可以在下面的查询中引用以下SQL函数及其用法
declare @str varchar(100) = 'aerwagf=werweyyqasd-we3289afa'
select
CHARINDEX('=',@str,1),
CHARINDEX('-',@str,CHARINDEX('=',@str,1)),
SUBSTRING(
@str,
CHARINDEX('=',@str,1)+1,
(CHARINDEX('-',@str,CHARINDEX('=',@str,1)) - CHARINDEX('=',@str,1)) - 1
)
在@ Shnugo的消息后,我将解决方案应用于您的样本数据 查询现在如下
select
SUBSTRING(a, CHARINDEX('=', a)+1, 6) as A, -- OK
SUBSTRING(
b,
CHARINDEX('_',b,1)+1,
(CHARINDEX(',',b,CHARINDEX('_',b,1)) - CHARINDEX('_',b,1)) - 1
) as B,
SUBSTRING(
c,
CHARINDEX('_',c,1)+1,
(CHARINDEX(',',c,CHARINDEX('_',c,1)) - CHARINDEX('_',c,1)) - 1
) as C
from TextTable
产生的输出是
答案 1 :(得分:0)
我的建议将首先在Name=
拆分,然后单独处理这些部分:
DECLARE @mockupTable TABLE(YourString VARCHAR(500));
INSERT INTO @mockupTable VALUES
('eNodeB Function Name=SMD085ML1_CIMANGLID, Local Cell ID=21, Cell Name=C_SMD085ML1_CIMANGLIDML2, eNodeB ID=160085, Cell FDD TDD indication=CELL_FDD')
,('eNodeB Function Name=CRB325ML_KEJAKSAANCRB, Local Cell ID=31, Cell Name=CRB325ML_KEJAKSAANCRBML3, eNodeB ID=154325, Cell FDD TDD indication=CELL_FDD')
,('eNodeB Function Name=CRB612ML_PILANGSARI, Local Cell ID=31, Cell Name=CRB612ML_PILANGSARIML3, eNodeB ID=154612, Cell FDD TDD indication=CELL_FDD');
WITH Splitted AS
(
SELECT CAST('<x>' + REPLACE(m.YourString,'Name=','</x><x>') + '</x>' AS XML) AS ToXml
FROM @mockupTable AS m
)
SELECT LEFT(A.Part1,6) AS a
,SUBSTRING(A.Part1,Pos1_Underscore+1,Pos1_Comma-Pos1_Underscore-1) AS b
,SUBSTRING(A.Part2,Pos2_Underscore+1,Pos2_Comma-Pos2_Underscore-1) AS c
FROM Splitted
CROSS APPLY(SELECT ToXml.value('/x[2]','nvarchar(max)') AS Part1
,ToXml.value('/x[3]','nvarchar(max)') AS Part2) AS A
CROSS APPLY(SELECT CHARINDEX('_',A.Part1,6) AS Pos1_Underscore
,CHARINDEX('_',A.Part2,6) AS Pos2_Underscore
,CHARINDEX(',',A.Part1) AS Pos1_Comma
,CHARINDEX(',',A.Part2) AS Pos2_Comma) AS B;
结果
a b c
SMD085 CIMANGLID CIMANGLIDML2
CRB325 KEJAKSAANCRB KEJAKSAANCRBML3
CRB612 PILANGSARI PILANGSARIML3
使用CROSS APPLY
可以创建更好的可读代码。您可以使用计算列,如命名变量...