Sql 如何仅返回特定字符后的记录?

Sql 如何仅返回特定字符后的记录?,sql,sql-server,Sql,Sql Server,如何仅返回特定字符后的记录? 例如: 预期成果: '1080599' 如果您希望提取字符串后面的每个字符,并且字符串中只有一个字符,那么这是可行的 select substring(column1,charindex('-',column1)+1,len(column1)) from tablename where charindex('-',column1) > 0 或者可以使用正确的方法 select right(column1,charindex('-',column1)) fr

如何仅返回特定字符后的记录? 例如:

预期成果:

'1080599'

如果您希望提取字符串后面的每个字符,并且字符串中只有一个字符,那么这是可行的

select substring(column1,charindex('-',column1)+1,len(column1)) from tablename
where charindex('-',column1) > 0
或者可以使用正确的方法

select right(column1,charindex('-',column1)) from tablename
where charindex('-',column1) > 0

如果您希望提取字符串后面的每个字符,并且字符串中只有一个字符,那么这是可行的

select substring(column1,charindex('-',column1)+1,len(column1)) from tablename
where charindex('-',column1) > 0
或者可以使用正确的方法

select right(column1,charindex('-',column1)) from tablename
where charindex('-',column1) > 0

vkp的解决方案可以正常工作,但您也可以使用PARSENAME使事情稍微简单一些,例如:

SELECT PARSENAME(REPLACE('101-2345678', '-', '.'), 1);
如果要清除空格,可以执行以下操作:

SELECT LTRIM(PARSENAME(REPLACE('101 - 2345678', '-', '.'), 1));
……甚至:

SELECT PARSENAME(REPLACE(REPLACE('101 - 2345678', '-', '.'), ' ', ''), 1);

vkp的解决方案可以正常工作,但您也可以使用PARSENAME使事情稍微简单一些,例如:

SELECT PARSENAME(REPLACE('101-2345678', '-', '.'), 1);
如果要清除空格,可以执行以下操作:

SELECT LTRIM(PARSENAME(REPLACE('101 - 2345678', '-', '.'), 1));
……甚至:

SELECT PARSENAME(REPLACE(REPLACE('101 - 2345678', '-', '.'), ' ', ''), 1);

你确定你的名字在这里吗?这不仅仅是为了返回对象名的一部分吗?是的,这有点像黑客,但它在这里起作用,因为我们可以假装我们正在解析具有两部分名称的对象。这就是为什么我将-s替换为.s,因为PARSENAME期望像dbo.table之类的东西。我向您致敬,好先生!你是个狡猾的天才,太棒了你确定你的名字在这里吗?这不仅仅是为了返回对象名的一部分吗?是的,这有点像黑客,但它在这里起作用,因为我们可以假装我们正在解析具有两部分名称的对象。这就是为什么我将-s替换为.s,因为PARSENAME期望像dbo.table之类的东西。我向您致敬,好先生!你是个狡猾的天才,太棒了D