获取SQL Server中某些字符之前和之后的所有内容

fff*_*f01 41 sql sql-server

我在我的数据库中输入了以下条目:

images/test.jpg
Run Code Online (Sandbox Code Playgroud)

我想修剪条目所以我得到: test

所以基本上,我想要一切都在/之前和之后.

我该如何解决?

Jos*_*ien 46

如果您想使用SQL将其从表中删除,请查看以下可以帮助您的函数:SUBSTRINGCHARINDEX.您可以使用它们来修剪条目.

可能的查询将如下所示(col包含图像目录的列的名称在哪里:

SELECT SUBSTRING(col, LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) + 1, 
    LEN(col) - LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) - LEN(SUBSTRING(
    col, CHARINDEX ('.', col), LEN(col))));
Run Code Online (Sandbox Code Playgroud)

有点丑陋的野兽.它还取决于'dir/name.ext'的标准格式.

编辑:
这个(灵感来自praveen)更通用,处理不同长度的扩展:

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col, 
    CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('.', col))) - 1);
Run Code Online (Sandbox Code Playgroud)


小智 33

使用以下功能

left(@test, charindex('/', @test) - 1)
Run Code Online (Sandbox Code Playgroud)

  • 你是说`-1`而不是'-2`? (7认同)
  • LEFT(@test, ISNULL(NULLIF(CHARINDEX('/', @test)-1, -1), LEN(@test))); (4认同)
  • 虽然这不符合OPs 2的要求,但这是一个很好的CLEAN方法来回答他的第一个 - 以及更常见的请求.(这正是我想要的) (3认同)
  • 如果那里没有出现字符,则会失败 (3认同)

小智 21

之前

SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster;
Run Code Online (Sandbox Code Playgroud)

SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster
Run Code Online (Sandbox Code Playgroud)


Asa*_*eem 8

----选择字符前/包括/

select SUBSTRING ('abcde/wxyz',0,CHARINDEX('/','abcde/wxyz')+1)
Run Code Online (Sandbox Code Playgroud)

--选择/包括/之后的字符

select SUBSTRING('abcde/wxyz',CHARINDEX('/','abcde/wxyz'),LEN('abcde/wxyz')) 
Run Code Online (Sandbox Code Playgroud)


pra*_*een 5

 declare @T table
  (
  Col varchar(20)
  )



  insert into @T 
  Select 'images/test1.jpg'
  union all
  Select 'images/test2.png'
  union all
  Select 'images/test3.jpg'
  union all
  Select 'images/test4.jpeg'
  union all
  Select 'images/test5.jpeg'

 Select substring( LEFT(Col,charindex('.',Col)-1),charindex('/',Col)+1,len(LEFT(Col,charindex('.',Col)-1))-1 )
from @T
Run Code Online (Sandbox Code Playgroud)


Roy*_*mir 5

我做了一个更通用的方法:

所以 :

DECLARE @a NVARCHAR(MAX)='images/test.jpg';


 --Touch here
DECLARE @keysValueToSearch NVARCHAR(4000) = '/'
DECLARE @untilThisCharAppears NVARCHAR(4000) = '.'
DECLARE @keysValueToSearchPattern NVARCHAR(4000) = '%' + @keysValueToSearch + '%'


 --Nothing to touch here     
SELECT SUBSTRING(
           @a,
           PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch),
           CHARINDEX(
               @untilThisCharAppears,
               @a,
               PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch)
           ) -(PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch))
       )
Run Code Online (Sandbox Code Playgroud)