仅从字符串的开头替换非字母字符

问题描述

如何在 sql Server 中删除字符串开头的非字母字符。

例如:6Hai 应该返回 HaiH6ai 应该返回 H6ai

我使用的是 sql Server 2017。

解决方法

一种模式可用于替换字符串中的非字母字符,如下所示:

Declare @Temp as varchar(50)
set @Temp = '6Hai'
Declare @KeepValues as varchar(50)
    Set @KeepValues = '%[^a-z]%'
    While PatIndex(@KeepValues,@Temp) = 1
        Set @Temp = Stuff(@Temp,1,'')

select @Temp

或者一个函数可以定义为:

Create Function [dbo].[RemoveNonAlphaCharactersFromStart](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin

    Declare @KeepValues as varchar(50)
    Set @KeepValues = '%[^a-z]%'
    While PatIndex(@KeepValues,'')

    Return @Temp
End

并调用函数:

Select dbo.RemoveNonAlphaCharactersFromStart('6Hai')

请参阅此答案以删除所有非字母字符:https://stackoverflow.com/a/1008566/7804477

我更新了函数,只删除开头的非字母字符:

StuffPatIndex 是内置函数。

这是仅在字符串开头检查的关键条件:While PatIndex(@KeepValues,@Temp) = 1

Stuff(@Temp,'') - 用空字符 '' 替换字符串中的第一个字符。 (第二个参数是起始位置,第三个参数表示要替换的字符数)