SELECT WEB_LOGIN
FROM dbo.Name_Security
WHERE WEB_LOGIN like 'GUEST%[A-Z][A-Z]%@[A-Z][A-Z]%.%[A-Z][A-Z][A-Z]%'
尝试运行查询以查找以GUEST开头的重复电子邮件地址。 然后将重复项删除到一个唯一的电子邮件地址。 问题是它们在GUEST和我试图重复删除的实际电子邮件地址之间引用了不同的数字。
EXAMPLE
GUEST635547889019125156DOGU@HTVA.NET
GUEST635547889110697422DOGU@HTVA.NET
GUEST635547889125638828DOGU@HTVA.NET
GUEST635547893650472813DOGU@HTVA.NET
GUEST635547893772132969DOGU@HTVA.NET
GUEST635547964640101719PHILIPKING@GMAIL.COM
GUEST635547965258978672PHILIPKING@GMAIL.COM
答案 0 :(得分:0)
我认为只有使用SQL才能实现它。
相反,您可以获取地址并在本地处理它们以获取重复项列表,如下所示:
// Depending on your context, use any way to get the result of the simple query
// "SELECT WEB_LOGIN FROM dbo.Name_Security"
// as an array of (WEB_LOGIN) in $raw_addresses
// Extract bare-addresses from raw-addresses
$bare_addresses = preg_replace('/^GUEST[\d]+(.*)$/i', '$1', $raw_addresses);
// Then create collections of raw-addresses for each bare-address
foreach ($bare_addresses as $index => $bare_address) {
$collections[$bare_address][] = $raw_addresses[$index];
}
// Select only collections having more than one index
$duplicates = array_filter($collections, function($indexes) {
return count($indexes > 1);
});
// Finally use duplicates to whatever you want...
根据您给出的示例,您可以看到它正常工作:4fi9-dx5v(点击“Run-F9”执行)。
答案 1 :(得分:0)
考虑运行嵌套的REPLACE()
以删除字段中的数字:
SELECT
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(WEB_LOGIN, '0', ''),
'1', ''),
'2', ''),
'3', ''),
'4', ''),
'5', ''),
'6', ''),
'7', ''),
'8', ''),
'9', '')
FROM dbo.Name_Security
WHERE WEB_LOGIN LIKE 'GUEST%';
或者,由于您发布了dbo
前缀,因此假定这是SQL Server,请使用一系列字符串函数 - SUBSTRING()
,PATINDEX
,LEN()
,{{ 1}} - 解析数字:
REVERSE()
两个选项的一个警告是包含数字的电子邮件地址,但所有重复项将一起处理。添加SELECT
SUBSTRING(WEB_LOGIN,
LEN(WEB_LOGIN)+1 - PATINDEX('%[0-9]%', REVERSE(WEB_LOGIN))+1,
LEN(WEB_LOGIN))
FROM dbo.Name_Security
WHERE WEB_LOGIN LIKE 'GUEST%';
以识别此类重复项。