如何从sql server中的字符串中删除单长字符?

时间:2017-06-29 11:46:45

标签: sql-server tsql

E.g。 输入字符串:“我是工程师” 预期产出:“我是工程师”

4 个答案:

答案 0 :(得分:4)

您可以使用stuff()

select stuff('I am an Engineer',1,1,'')

返回:am an Engineer

如果你想修剪字符串左侧的空格,你可以使用ltrim()

select ltrim(stuff('I am an Engineer',1,1,''))

返回:am an Engineer

rextester演示:http://rextester.com/BQHYR97427

如果要删除字符串中第一个字符实例,可以在案例表达式中使用charindex()stuff()来确保字符在字符串中,如下所示:

declare @str varchar(32) = 'I am an Engineer';
declare @char char(1) = 'n'

select str = case when charindex(@char,@str) > 0 
          then stuff(@str,charindex(@char,@str),1,'') 
          else @str 
          end

返回:I am a Engineer

rextester演示:http://rextester.com/UZCVR72854

答案 1 :(得分:2)

尝试使用STRING_SPLIT功能和XML,您可以尝试一下

  

从SQL 2016开始

SELECT VALUE + ' '  FROM STRING_SPLIT ('abcd xyz d pqrs d wxy',' ') WHERE LEN(Value) > 1
FOR XML PATH ('')

结果

abcd xyz pqrs wxy

  

对于较低版本的SQL,您可能需要创建一个函数来执行该过程

CREATE FUNCTION dbo.SplitString(@String NVARCHAR(MAX), @Delimiter CHAR(1))    
RETURNS @Results TABLE (Result NVARCHAR(MAX))    
AS    
BEGIN  
 DECLARE @Index INT    
 DECLARE @Data NVARCHAR(MAX)    

 SELECT @Index = 1    
 IF @String IS NULL RETURN  

 WHILE @Index != 0    
 BEGIN      
  SELECT @Index = CHARINDEX(@Delimiter, @String)    
  IF @Index != 0    
   SELECT @Data = LEFT(@String, @Index - 1)    
  ELSE    
   SELECT @Data = @String    
  INSERT INTO @Results(Result) VALUES (@Data)    
  SELECT @String = RIGHT(@String, LEN(@String) - @Index)    
  IF LEN(@String) = 0 BREAK    
 END    
 RETURN  
END 

答案 2 :(得分:1)

使用 RIGHT 功能

SELECT RIGHT('Your String',len('Your String')-1)

答案 3 :(得分:0)

为什么不始终始于字符串的第2位?即:

DECLARE @string VARCHAR(100)
SET @string = 'I am an Engineer'

SELECT LTRIM(SUBSTRING(@string, 2, LEN(@string) ))

...将返回:'我是工程师'