SQL字符串从特定字符中删除后续字符

时间:2017-01-25 05:57:28

标签: sql sql-server

我的任务是显示看起来像Foo - BarFoo-Bar Foo - BarFoo!.,-BarFoo...-Bar的字符串,我需要显示它仅限Foo。含义我必须删除-符号后面的所有字符以及它之前的所有特殊字符。是否有一个我可以使用的简单函数可以满足我给出的所有字符串实例所需的输出:Foo?我们使用SQL Server 2008 r2。

编辑:我需要提一下,Foo和Bar这两个词只是实际字符串的一种表示,所以编码字符串长度是不行的。

4 个答案:

答案 0 :(得分:1)

试试这个

controller

答案 1 :(得分:1)

我提出了这个问题(感谢John Cappelletti提供的样本数据,在未来的问题上自行完成):

Declare @YourTable table (col varchar(50))
Insert into @YourTable values
 ('Foo - Bar')
,('Foo-Bar')
,('Foo        - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo - Bar aaa')

查询:

SELECT  col, 
        LEFT(BeforeDash, LEN(BeforeDash) - PATINDEX('%[a-z]%', REVERSE(BeforeDash))+1)
FROM     
(
    SELECT col, LEFT(col, CHARINDEX('-', col)) As BeforeDash
    FROM @YourTable
) derived

结果:

col                     Display
Foo - Bar               Foo
Foo-Bar                 Foo
Foo        - Bar        Foo
Foo!.,-Bar              Foo
Foo...-Bar              Foo
aaa Foo - Bar aaa       aaa Foo

答案 2 :(得分:0)

Declare @YourTable table (col varchar(50))
Insert into @YourTable values
 ('Foo - Bar')
,('Foo-Bar')
,('Foo        - Bar')
,('Foo!.,-Bar')
,('Foo...-Bar')
,('aaa Foo-Bar aaa')
,('There is no Bar-Foo here')

Declare @Search varchar(50) = 'Foo - Bar'
Select *
      ,Display = case when col like '%'+Replace(@Search,' ','%')+'%' 
                      then Left(@Search,charindex('-',@Search)-1)
                      else col 
                 end
 From  @YourTable 

返回

col                         Display
Foo - Bar                   Foo 
Foo-Bar                     Foo 
Foo        - Bar            Foo 
Foo!.,-Bar                  Foo 
Foo...-Bar                  Foo 
aaa Foo-Bar aaa             Foo 
There is no Bar-Foo here    There is no Bar-Foo here

答案 3 :(得分:-1)

   DECLARE @STRING VARCHAR(2000)
SET @STRING = 'FOO - DEPTH'


SELECT LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(SUBSTRING(@STRING, 0, CHARINDEX('-', @STRING)),'!',''),'.',''),',','')))