从字符串值中删除1个字母

时间:2018-10-29 22:32:15

标签: sql-server tsql

我有一堆通过查询返回的字符串值。其中有一些领先的A-Z。是否可以检测到1个字母的单词并将其删除?

DECLARE @T AS TABLE
( 
 String varchar(100)    
)

INSERT INTO @T (String) VALUES
('A String Value'),
('B Stackoverflow'),
('Microsoft'),
('T Google, Yahoo')

预期结果:

String Value
Stackoverflow
Microsoft
Google, Yahoo

这怎么办?

2 个答案:

答案 0 :(得分:2)

像使用CHARINDEX()LTRIM()SUBSTRING()

SELECT LTRIM(SUBSTRING(String, CHARINDEX(' ', String), LEN(String))) Result
FROM @T;

或者通过检测第二个字符是否为空格(更好)

SELECT SUBSTRING(String, CASE WHEN
                              CHARINDEX(' ', String) = 2
                              THEN 3
                              ELSE 1 END, LEN(String) ) Result
FROM @T;

如果您正在使用类似2012+版本的版本,也可以将CASE替换为IIF()功能

SELECT SUBSTRING(String, IIF(CHARINDEX(' ', String) = 2, 3, 1), LEN(String) ) Result
FROM @T;

返回:

+---------------+
|    Result     |
+---------------+
| String Value  |
| Stackoverflow |
| Microsoft     |
| Google, Yahoo |
+---------------+

答案 1 :(得分:1)

您可以使用like来匹配由一个字母,一个空格和零个或多个其他字符组成的模式,以确定是否需要缩短字符串。确定后,您可以使用StuffSubstringRightLen删除前两个字符。

select String,
  case when String like '[A-Z] %' then Stuff( String, 1, 2, '' ) else String end as ShorterString
  from @T;