如何在Sybase中提取多逗号字符串的倒数第二个值
Sybase提取逗号分隔字符串的倒数第二个值
针对你在Sybase中需要从comments列(值为多逗号分隔的字符串,例如SURNAME,NAME,DATE,AMOUNT,ERROR,STATUS)提取倒数第二个值的需求,可以基于你已有的取最后一个值的逻辑进行修改,提供两种实现方式:
方法一:先移除最后一段再取剩余部分的最后一段
复用你原有的取最后一段的逻辑,先去掉字符串的最后一个元素及分隔逗号,再对剩余内容取最后一段,即可得到倒数第二个值:
right( left(comments, len(comments) - charindex(',', reverse(comments)+',')), charindex(',', reverse(left(comments, len(comments) - charindex(',', reverse(comments)+',')))+',')-1 )
逻辑说明:
len(comments) - charindex(',', reverse(comments)+','):计算出需要保留的字符串长度(移除最后一个逗号及后续内容),通过left()截取得到去掉最后一段的字符串- 对截取后的字符串,使用你原有的
right(..., charindex(',', reverse(...)+',')-1)逻辑,取出剩余内容的最后一段,即原字符串的倒数第二个值
方法二:通过反转字符串截取中间段
通过两次反转和位置定位,直接截取倒数第二个值:
reverse( substring( reverse(comments), charindex(',', reverse(comments)) + 1, charindex(',', reverse(comments), charindex(',', reverse(comments)) + 1) - charindex(',', reverse(comments)) - 1 ) )
逻辑说明:
- 反转原字符串后,第一个逗号对应原字符串的最后一个逗号,第二个逗号对应原字符串的倒数第二个逗号
- 截取这两个逗号之间的子串,再次反转后即为原字符串的倒数第二个值
内容的提问来源于stack exchange,提问作者J Llorca
相关产品推荐
相关产品推荐

