我有一堆通过查询返回的字符串值。其中有一些领先的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
这怎么办?
答案 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
来匹配由一个字母,一个空格和零个或多个其他字符组成的模式,以确定是否需要缩短字符串。确定后,您可以使用Stuff
,Substring
或Right
和Len
删除前两个字符。
select String,
case when String like '[A-Z] %' then Stuff( String, 1, 2, '' ) else String end as ShorterString
from @T;