【问题标题】:Identify Special Characters and numbers in SQL识别 SQL 中的特殊字符和数字
【发布时间】:2021-03-31 03:12:44
【问题描述】:

就我而言,我有一个 varchar 变量,例如 Test1@abc。我想识别该字符串中的特殊字符和数字并返回它们。此字符串只能包含字母、空格和下划线(a-z、A-Z、空格、_)。不允许使用所有其他字符。我想退货。谢谢。

DECLARE @StringVal VARCHAR(250) = 'Test1@abc' 
IF(--condition)
BEGIN
    --output -> 1,@
END

【问题讨论】:

  • 如果字符串"只能包含字母、空格和下划线(a-z, A-Z, space,_)"那为什么只有字符呢?显然是允许的。
  • 另外,SQL Server 2008 在一年多前就已经结束了生命周期,您真的应该尽快考虑升级路径。

标签: sql sql-server sql-server-2008


【解决方案1】:

如果你想要刚刚打印出来的结果,你可以使用:

DECLARE @StringVal VARCHAR(400) = 'Test1@abc';  
DECLARE @expres VARCHAR(MAX) = '%[^a-zA-Z_]%';

WHILE @StringVal LIKE @expres
BEGIN
    PRINT SUBSTRING(@stringVal, PATINDEX(@expres, @stringVal), 1);
    SET @stringval = STUFF(@stringVal, 1, PATINDEX(@expres, @stringVal), '');
END;

如果您希望它们作为字符串输出,您可以将它们连接起来:

DECLARE @StringVal VARCHAR(400) = 'Test1@abc';
DECLARE @expres VARCHAR(MAX) = '%[^a-zA-Z_]%';
DECLARE @output VARCHAR(MAX) = '';

WHILE @StringVal LIKE @expres
BEGIN
    SET @output = @output + SUBSTRING(@stringVal, PATINDEX(@expres, @stringVal), 1);
    SET @stringval = STUFF(@stringVal, 1, PATINDEX(@expres, @stringVal), '');
END;

SELECT @output;

Here 是一个 dbfiddle。

【讨论】:

    【解决方案2】:

    使用正则表达式

    DECLARE @StringVal VARCHAR(400) = 'Test1@abc'
    
    DECLARE @expres VARCHAR(50) = '%[^~,@,#,$,%,&,*,(,),.,!,0-9]%'
    
    WHILE PATINDEX( @expres, @StringVal ) > 0
    SET @StringVal = Replace(REPLACE( @StringVal, SUBSTRING( @StringVal, PATINDEX( @expres, @StringVal ), 1 ),''),'-',' ')
    
    IF(@StringVal LIKE '%[~,@,#,$,%,&,*,(,),.,!,0-9]%')
    BEGIN
    SELECT @StringVal AS [Special Char]
    END
    ELSE
    SELECT 'No Special Characters'  AS [Non Special Char]
    

    【讨论】:

    • @prasanga 。 . .我认为最好的解决方案不涉及列出 不能 包含的字符。根据那些可以包含的逻辑来表达逻辑就足够简单了。
    • 如果你这么认为,那么你可以改变逻辑而不是不包括特殊字符,DECLARE @expres VARCHAR(50) = '%[a-zA-Z]%' - 我们可以包括声明和条件检查 (IF) stmts 中的字母
    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2012-10-30
    • 2012-03-28
    相关资源
    最近更新 更多