【问题标题】:Ignore wildcard in MSSQL Variable?忽略 MSSQL 变量中的通配符?
【发布时间】:2018-11-25 02:17:41
【问题描述】:

我有一个包含两个参数的存储过程。前缀 varchar(50) 和后缀 varchar(50)。存储过程选择一些带有 where 子句的行。现在的问题是,如果变量中有通配符,我会出错。如何忽略也可能是通配符的可变字符?

例子:

假设我有两行:

1 . myColumn : 'ABCTTAX'
2. myColumn: 'ABCTT_X'

declare @Prefix varchar(50)
declare @Suffix varchar(50)

set @Prefix = 'ABC';
set @Suffix = '_X';

Select * from myTable where @Suffix IS NOT NULL AND myColumn like @Prefix + '__' + @Suffix

在上面的示例中,两行都将匹配。但我只想匹配第二个。

【问题讨论】:

  • set @Suffix = '[_]X';

标签: sql sql-server wildcard


【解决方案1】:

通过用括号替换下划线文字来转义它。

Select * from myTable where @Suffix IS NOT NULL AND myColumn 
    like REPLACE(@Prefix, '_', '[_]') + '__' + REPLACE(@Suffix, '_', '[_]')

此补丁将不允许前缀和后缀输入通配符下划线。

【讨论】:

  • 如果我想忽略所有通配符?没有比创建一个大的替换列表更简单的方法了吗?
  • 是的,明白为什么,精神上的昙花一现。双倍替换:REPLACE(REPLACE(@Suffix, '_', '[_]'),'*','[*])
  • @Amsel 如果您使用 LIKE 运算符,那么您将不得不转义所有特殊模式字符:[]%_^(我可能会丢失更多)。如果您只是验证前缀和后缀,则 LIKE 的替代方法是使用 CHARINDEX 并与结果的位置进行比较。
【解决方案2】:

实际上你可以做类似的事情, 试试

Select * from myTable where @Suffix IS NOT NULL AND myColumn like @Prefix + '%\' + @Suffix escape '\'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多