我在Microsoft SQL server management studio中有如下字符串
A,5000; B,的 3000 ; LC,3000
我需要提取'; LC'之前的值。在字符串的第二个逗号之后。
在上面的示例中,我的子字符串应该为3000(这是期望的结果)。
我已将PATINDEX函数识别为解决方案的一部分,但无法弄清楚如何识别字符串的第二个逗号。
答案 0 :(得分:1)
不优雅且长期的解决方案是使用PATHINDEX,REVERSE和SUBSTRING函数:
SELECT
REVERSE(
SUBSTRING(
REVERSE(SUBSTRING([column],0,PATINDEX('%;LC%',[column]))),
0,
PATINDEX('%,%',REVERSE(SUBSTRING([column],0,PATINDEX('%;LC%',[column])))))
)
from [table]
答案 1 :(得分:0)
您可以使用交叉申请:
select substring(myColumn, p4.Pos + 1, P2.Pos - p4.Pos - 1) Before2nd
from myTable
cross apply (select (charindex(';', myColumn))) as P1(Pos)
cross apply (select (charindex(';', myColumn, P1.Pos+1))) as P2(Pos)
cross apply (select (charindex(',', myColumn))) as P3(Pos)
cross apply (select (charindex(',', myColumn, P3.Pos+1))) as P4(Pos)
答案 2 :(得分:0)
请使用" / XMLRoot / RowData"如下例:
DECLARE @StringList NVARCHAR(MAX) SET @StringList =' A,5000; B,3000; LC,3000' --INSERT INTO TABLEName(col) SELECT LTRIM(RTRIM(mnvalue('。[1]',' varchar(8000)')))AS OutPutList FROM(SELECT CAST('&#39) ; + REPLACE(@StringList,',''')+'' AS XML)AS t )tbl CROSS APPLY t.nodes(' / XMLRoot / RowData')m(n)
答案 3 :(得分:0)
要查找字符串的倒数第二个逗号,可以使用REVERSE()
函数。
尝试以下解决方案:
DECLARE @String VARCHAR(100)='A,5000;B,3000;LC,3000'
SELECT REVERSE(SUBSTRING(REVERSE(@String),CHARINDEX(';',REVERSE(@String))+1,CHARINDEX(',',REVERSE(@String),CHARINDEX(';',REVERSE(@String)))-CHARINDEX(';',REVERSE(@String))-1))
答案 4 :(得分:0)
Exception in thread "main" java.lang.NoClassDefFoundError: org/greenrobot/greendao/generator/Schema
at com.example.MainGenerator.main(MainGenerator.java:12)
Caused by: java.lang.ClassNotFoundException: org.greenrobot.greendao.generator.Schema
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more