在SELECT语句中的分隔值右侧提取字符

问题描述

这个问题有一个特定于数据库的答案。

如果使用sql Server:

SELECT column1
     , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted
     , column3 
FROM myTable

您可以添加CASE语句或NULLIF()在连字符不总是出现的情况下使用:

SELECT column1
     , CASE WHEN column2 LIKE '%-%' THEN RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) 
           END as extracted
     , column3 
FROM myTable

或者:

SELECT column1
     , RIGHT(column2,NULLIF(CHARINDEX('-',REVERSE(column2)),0)-1) as extracted
     , column3 
FROM myTable

如果使用MysqL,请更改CHARINDEX()LOCATE()。我相信它是Oracle,INstr()并且前两个参数已切换,首先是您要搜索的字符串,然后是您要搜索的字符串。

解决方法

我需要提取连字符右边的所有字符作为select语句的一部分。选择中将有其他列。在下面的查询中,从第二列中选择了右边的三个字符。我如何提取定界符右边的不定数量的字符(在我的情况下为连字符)?我可以使用正确的功能吗?我需要使用其他功能吗?

Select column1,right(column2,3) as extracted,column3
From myTable

我正在使用SQL Server 2008。