数据库中的通配符

时间:2013-01-10 04:36:43

标签: sql regex

任何人都有指针如何在数据库中存储通配符,并查看字符串匹配的行?可以吗?

e.g。 DB包含如下表:

two column table with wildcards in col one

所以john3136应该是正常工资的10倍。 fred3136将获得正常工资的一半。 harry3136可能会崩溃应用程序,因为没有匹配的数据; - )

代码需要执行以下操作:

foreach(Employee e in all_employees) {
    SELECT Multiplier FROM PayScales WHERE
        //??? e.Name matches the PayScales.Name wildcard
}

谢谢!

修改 这是一个现实世界的问题:我有一个包含通配符的参数文件。代码目前遍历员工,遍历param文件寻找匹配 - 你可以看到我为什么要“数据化”它; - )

通配符是可选的。该行可以说“john3136”只匹配一名员工。 (真正的应用程序实际上并不是员工,所以即使在这个简单的例子中看起来有点矫枉过正,它确实有意义)

一个选项打开:我在开始之前就知道所有员工的名字,所以我可以遍历它们并有效地扩展临时表中的通配符。 (所以如果我在起始表中有john3136 *,它可能会根据员工列表扩展到john3136,john31366等)。我希望找到比这更好的方法,因为它需要更多维护(例如,如果我们添加添加员工的功能,我们需要维护扩展的通配符表)。

1 个答案:

答案 0 :(得分:0)

SELECT * FROM payscales 
 WHERE e.Name 
  LIKE regexp_replace(name, E'^\\*|\\*$', '%', 'g');

我不知道您正在使用哪个数据库。上述查询适用于postgresql,只需将您的尾随和前导通配符替换为%,即LIKE通配符。

如果不存在通配符,则它必须与完整字符串匹配。