2015-10-06 82 views
1

我有一个我想修剪的字符串。我正在寻找的是从字符串中获得价值的方法,直到最后的Y根据条件从字符串中获取char的SQL查询

例:

  1. AB Y bc Y dc Y1 - >AB Y bc Y dc Y
  2. ABYBCY - >ABYBCY
  3. ABY BCY DC - >ABY BCY

我想下面的查询,但我AMN没有得到我所需要的。

DECLARE @name varchar(200)='RAM, Y SHAM Y AB' 
SELECT @name 
     ,right(@name, CHARINDEX('Y', @name) - 1) AS [Surname] 
     ,REPLACE(SUBSTRING(@name, CHARINDEX(',', @name), LEN(@name)), ',', '') AS [FirstName] 

回答

3

您可以stuff()reverse()做到这一点。

像这样的事情

SELECT STUFF(
      @name, 
      LEN(@name) - CHARINDEX('Y', REVERSE(@name)), 
      LEN(@name), 
      '' 
     ) string 

注:这是假设至少有一个“Y”给定的字符串中。

Here is a SQL Fiddle.

+0

变量名是错误的 - @name - 请代码更改 – pedram

+0

是代码工作,除了两个条件..最后'Y'我必须手动添加2.如果没有'Y' – Mahajan344

+0

Tha nks你的帮助 – Mahajan344

1

您也可以尝试这样的:

Select substring(@name,1, len(@name) - (charindex('Y', reverse(@name)))+1) 
+0

你甚至可以使用LEFT来缩短它的衬底 –

0

只需使用CHARINDEX和字符串函数我们可以实现的结果

declare @t table (Val varchar(30)) 
insert into @t (Val) values 
('AB Y bc Y dc Y1'), 
('ABYCY1'), 
('ABY BCY DC') 

select REVERSE(SUBSTRING(REVERSE(Val),CHARINDEX('Y',REVERSE(Val)),LEN(Val))) 
from @t