sql server 字符串截取的一些问题

2025-03-23 00:03:37
推荐回答(3个)
回答1:

取倒数第二个逗号和倒数第一个逗号的值是么?方法很多,举个例子:

with tmp(col) as(
select '123,3,3,56,77,233'
union all 
select  ',1,4,5,21,43,'
)
select reverse(substring(col,
                         CHARINDEX(',', col) + 1,
                         CHARINDEX(',', col, CHARINDEX(',', col) + 1) -
                         CHARINDEX(',', col) - 1))
  from (select reverse(col) as col from tmp) t

 如果只有一个逗号可以考虑CTE递归或者PLSQL:

with tmp(col) as(
select '77,233'
union all 
select  ',1,4,5,21,43,'
),
roy AS
 (SELECT col = 
         CAST(LEFT(col, CHARINDEX(',', col + ',') - 1) AS NVARCHAR(100)), Split = CAST(STUFF(col + ',', 1, CHARINDEX(',', col + ','), '') AS  NVARCHAR(100))  ,len(col)-len(REPLACE(col,',','')) as level
 from tmp
  UNION ALL   
  SELECT col = CAST(LEFT(Split, CHARINDEX(',', Split) - 1) AS NVARCHAR(100)),Split = CAST(STUFF(Split, 1, CHARINDEX(',', Split), '') AS NVARCHAR(100)),level-1
 FROM Roy  
   WHERE split > '')
select col from roy where level =1

回答2:

上一句就描述清楚了,下一句注意你想表达的是什么意思,本来你是想得到43,还传递43进去,在C_TransferID,1,4,5,21,43,中又得到43,你这是什么意思???

回答3:

用一个循环,找到最后一个逗号,就解决了。