我需要提取连字符右边的所有字符作为select语句的一部分。选择中将有其他列。在下面的查询中,从第二列中选择了右边的三个字符。我如何提取定界符右边的不定数量的字符(在我的情况下为连字符)?我可以使用正确的功能吗?我需要使用其他功能吗?
Select column1, right(column2,3) as extracted, column3 From myTable
我正在使用SQL Server 2008。
这个问题有一个特定于数据库的答案。
如果使用SQL Server:
SELECT column1 , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted , column3 FROM myTable
您可以添加CASE语句或NULLIF()在连字符不总是出现的情况下使用:
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()并且前两个参数已切换,首先是您要搜索的字符串,然后是您要搜索的字符串。
CHARINDEX()
LOCATE()
INSTR()