假设我有一个像这样的 SQL Server 表..
..并且想要搜索包含“345”的电话号码,忽略任何空格。
在 SQL Server 中,这很容易做到:
我的问题是,我想在 LDAP 查询中执行此操作,而 LDAP 查询无法识别 REPLACE 函数。
我们的 Active Directory 中的电话号码经常包含空格(或其他字符),但我不知道如何编写 LDAP 查询来模拟 SQL
REPLACE()
函数。
所以,现在,我的查询可以在所有电话号码中搜索“345”,但这三个字符必须出现在 AD 中,中间没有任何空格。
Select sn,givenName,mobile,telephoneNumber
From 'LDAP://OurServerName/DC=global,DC=OurCompany,DC=net'
Where (mobile='*345*' OR telephoneNumber ='*345*' )
有谁知道如何让 LDAP 进行搜索,忽略空格?
我发现了类似的问题,这表明LDAP只是开箱即用地处理这个问题......但从我所看到的来看,它并没有......
(是的,我们希望避免针对 Active Directory 运行脚本来删除所有电话号码中的所有空格。)
顺便说一句,我们公司员工不到 1500 人,所以查询的性能应该不成问题。
您可以根据需要使用任意数量的星号符号 '*' 来解决该问题。这里我的意思是 两个字符之间恰好有一个 星号(除了开头和结尾)。
注意: 以下 2 个星号不起作用。
您的情况:
Select sn,givenName,mobile,telephoneNumber
From 'LDAP://OurServerName/DC=global,DC=OurCompany,DC=net'
Where (mobile='*3*4*5*' OR telephoneNumber ='*3*4*5*' )
const getUsersByPhoneNumber = (phoneNumber) => {
//...
const searchDNPhoneNumber = `telephoneNumber=*${phoneNumber.split("")
.map(character => character + "*")
.reduce((accumulator, currentCharacter) => accumulator + currentCharacter)}`;
// Possible result here could be '+*1*2*3*-*4*5*6*-*7*8*'
//...
return searchDNPhoneNumber;
}
console.log(getUsersByPhoneNumber("+123-456-789"));