我有一个债务收集数据库,在1个表格中有71列,可能有一个电话号码(primary phone, work phone, cell phone, custom1, custom2, custom3)
等等。等等......我想要完成的是{{{ 1}}表单应用,用于搜索您在表单中输入的C# window
,并找到匹配项,以便在成功匹配phone number
时为您提供帐户的account number
。
并非所有电话号码都具有完全相同的格式,即。 phone number
等......到目前为止,我还没有找到任何关于如何构造select语句以找到匹配的内容。我在整个过程中都是一个完整的菜鸟,但是从我发现的可能中我可以使用CONCAT或(444-444-1111, 4444441111, (444)444-1111)
。
非常感谢任何例子!
这只是我所思考的模型。
REGEXP
答案 0 :(得分:1)
类似的东西:
select *
from dbase
where
primaryphone = '444-444-1111'
OR cellphone = '444-444-1111',
OR workphone = '444-444-1111'
// etc.
这是一个可怕的设计,但如果它是一次性的事情......
模糊匹配需要另一种方法,而且非常复杂。对于正则表达式,您必须进行替换,但我认为mysql没有替换任何内置正则表达式(同样,您可以构建自定义正则表达式函数,但它并不简单)。
如果你知道确切的分隔符,你可以做一些简单的替换:
select *
from dbase
where
REPLACE(
REPLACE(
REPLACE(primaryphone,'-','')
,'(','')
,')','') = '4444441111'
OR REPLACE(
REPLACE(
REPLACE(cellphone,'-','')
,'(','')
,')','') = '4444441111'
//etc.
为此,您需要在没有任何符号的情况下传递搜索到的数字,并根据需要删除(使用尽可能多REPLACE
个)记录中可能存在的所有已知符号。
同样,可怕的设计,但查询可以由工具生成,如果你不能改变你的数据库...
答案 1 :(得分:0)
除了@ Jcl的回答之外,您还可以使用REPLACE删除字段中的任何噪音,以便只获取数字,从而提高匹配率:
SELECT *
FROM dbase
WHERE REPLACE(primaryphone, '-', '') = '4444441111'
您可以链接REPLACES以删除所有内容:
REPLACE(REPLACE(REPLACE('(444)444-1111', '-', ''), '(', ''), ')', '')
如果你要剥离的字符列表很长,你可以use a table variable
答案 2 :(得分:0)
您可以使用如下所示的CONCAT语句,而不是对所有三列手机使用或声明!
var myForm = document.form1;
function btnCheckFormClick(e) {
var txtName = myForm.txtName;
var txtAge = myForm.txtAge;
if (txtAge.value == "" || txtName.value == "") {
alert("Please complete all of the form");
if (txtName.value == "") {
txtName.focus();
} else {
txtAge.focus();
}
} else {
alert("Thanks for completing the form " + txtName.value);
}
}
function txtAgeBlur(e) {
var target = e.target;
if (isNaN(target.value)) {
alert("Please enter a valid age");
target.focus();
target.select();
}
}
function txtNameChange(e) {
alert("Hi " + e.target.value);
}
myForm.txtName.addEventListener("change", txtNameChange);
myForm.txtAge.addEventListener("blur", txtAgeBlur);
myForm.btnCheckForm.addEventListener("click", btnCheckFormClick);