【问题标题】:MySQL: how to create a record that can be queried for matching patternsMySQL:如何创建可以查询匹配模式的记录
【发布时间】:2011-08-09 18:12:16
【问题描述】:

我有一个这样的电话簿数据库:

         company_name |  company_number  |   company_priority

每次来电时,Asterisk 系统中的一个模块都会对号码进行查询以检测优先级。

select company_priority from clients where company_number like '%NUMBER%';

并根据优先级将呼叫路由到不同的路由。

我现在要做的是是否可以将任何特殊字符放入记录中(是的,而不是在查询中)。比如 1800**

或者,我们可以执行两个不同的查询吗?比如“select * from xx || select * from xx”;

我无法更改变量或查询,因为它是内置在模块中的。我唯一的其他选择是打开模块并在那里进行一些更改。

【问题讨论】:

  • 不确定您在这里要求什么。您是说任何以“1800”开头的数字都应该获得优先于公司优先级的优先级值吗?
  • 你能举一个正面和负面的例子来说明你想要发生的事情吗?你是说如果我从 1-804-555-1212 打来,你想找到任何 1804555* 的模糊匹配?或类似的东西?
  • 是的@trickynixon 和乔。我想要一个像 1800* 这样的记录,我可以针对它运行一个查询,该查询将挑选出任何 1800xxxxxxxxx 呼叫。

标签: mysql sql linux


【解决方案1】:

你可以,它有效!我也很惊讶!示例:

create table tmp ( a varchar(20) );

insert into tmp values ('%ahoj%'), ('nazdar%');

select * from tmp where 'nazdar   ahoj' like a;

+---------+
| a       |
+---------+
| %ahoj%  |
| nazdar% |
+---------+

因此,在您的情况下,您可以填写例如1080% 在 company_number 列中标识所有以 1080 开头的号码。然后用这个查询测试特定的 NUMBER:

select company_priority from clients where 'NUMBER' like company_number;

【讨论】:

  • 太棒了,我从没想过换一种方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多