我有一个测试功能,可以清理手机号码,只允许存储nos和字符“x”或“X”。除了它允许我不想要的多个x之外,我还有其中的大部分功能。任何人都可以帮助我将它添加到正则表达式中,如果发现潜在问题也可以告诉我吗?
CREATE Function [dbo].[RemoveAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^0-9,x,X]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^0-9,x,X]%', @Temp), 1, '')
Return @TEmp
End
答案 0 :(得分:2)
这里PATINDEX
的问题在于它无法真正确定模式在第一次遇到字符串后应该发生变化。所以也许这种方法会更简单:
CREATE FUNCTION [dbo].[RemoveAlphaCharacters]
(
@Temp VARCHAR(1000)
)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @i INT, @hitX BIT, @t VARCHAR(1000), @c CHAR(1);
SELECT @i = 1, @hitX = 0, @t = '';
WHILE @i <= LEN(@Temp)
BEGIN
SET @c = SUBSTRING(@Temp, @i, 1);
IF LOWER(@c) = 'x' AND @hitX = 0
BEGIN
SET @t = @t + @c;
SET @hitX = 1;
END
IF @c LIKE '[0-9]'
BEGIN
SET @t = @t + @c;
END
SET @i = @i + 1;
END
RETURN(@t);
END
GO
SELECT dbo.RemoveAlphaCharacters('401-867-9092');
SELECT dbo.RemoveAlphaCharacters('401-867-9092x32');
SELECT dbo.RemoveAlphaCharacters('401-867-9092x32x54');
结果:
4018679092
4018679092x32
4018679092x3254