任何人都可以给我一些示例TSQL代码来比较两个电子邮件地址,以检查它们是否相等?
CLR功能不是一种选择。我试过了,但我们的DBA由于某种原因完全反对在SSMS中使用CLR功能。
我知道如何从电子邮件地址获取域名(例如:mycompany.com)。
真的很感激任何建议 提前致谢
答案 0 :(得分:7)
在SQL Server 2005+中使用函数CHECKSUM()
CHECKSUM在其参数列表上计算一个称为校验和的哈希值。哈希值旨在用于构建哈希索引。如果CHECKSUM的参数是列,并且在计算的CHECKSUM值上构建索引,则结果是哈希索引。这可用于对列进行相等搜索。 有关CHECKSUM()
的更多信息DECLARE @email1 varchar(100) = 'billg@microsoft.com'
DECLARE @email2 varchar(100) = 'melinda@microsoft.com'
SELECT CASE WHEN CHECKSUM(@email1) = CHECKSUM(@email2) THEN 'Same Email'
ELSE 'Different Email' END
答案 1 :(得分:6)
不确定你在寻找什么。根据您的问题,我了解您需要检查2个电子邮件地址的相似性/不相似性。
为什么不能使用它?
declare @email1 varchar(100) set @email1 = 'billg@microsoft.com'
declare @email2 varchar(100) set @email2 = 'melinda@microsoft.com'
IF
@email1=@email2
BEGIN
PRINT 'Same Email'
END
ELSE
BEGIN
PRINT 'Not Same Email'
END
拉吉
答案 2 :(得分:0)
测试两个电子邮件地址是否具有相同的域名:
declare @email1 varchar(100) set @email1 = 'billg@microsoft.com'
declare @email2 varchar(100) set @email2 = 'melinda@microsoft.com'
select
case when
right(@email1, len(@email1) - charindex('@', @email1)) =
right(@email2, len(@email2) - charindex('@', @email2))
then 'Same domain'
else 'Different domains'
end
答案 3 :(得分:0)
虽然这是一篇旧文章,但我认为使用CHECKSUM评论解决方案非常重要。根据定义,校验和属于有限空间,因此具有有限数量的不同值。对于32位数字,有4,294,967,295个可能的值。我很想说当两个电子邮件地址产生相同的校验和时,只有4,294,967,295个可能的值留给潜在的冲突。纯字符串比较(email1 = email2) - 由Raj建议 - 防止这种冲突,因为它们的性质电子邮件地址是唯一的。
[http://preshing.com/20110504/hash-collision-probabilities/][2]
答案 4 :(得分:0)
-patindex()函数如何?
-小例子:
model small
.stack 100H
.data
hexnumber db 10,13,'Enter a hex digit: $'
continue db 10,13,'Do you want to continue?: $'
errormsg db 10,13,'Illegal character, Enter 0..9 or A..F: $'
decimalnumber db 10,13,'In decimal it is: $'
.code
MAIN PROC
mov ax,@data
mov ds,ax
continue: ; start of loop
mov ah,9
mov dx,offset hexnumber
int 21h
mov ah,1
int 21h
mov cl,al
legal: ;Compare input to see if its less than 00H if its greater
;than AAH
cmp cl,00h ;cl < 00h
jl end_if ;yes, error msg
cmp cl,AAh ;compare cl >AAhh
jg end_if ;yes, error msg
jmp finally
end_if:
mov ah,9
lea dx,errormsg ; print error message
int 21h
jmp continue ; reenter a hex number
jmp legal ; jump back to test
finally:
; determine if number ; 0..9 and display
mov ah,9
lea dx,decimalnumber ; display decimalnumber
int 21h
mov ah,2
mov dl,cl ;display number
int 21h
; determine if number a..f and display
mov ah,9
lea dx,decimalnumber ; display decimalnumber
int 21h
mov ah,2
mov dl,cl ; display MSB for 'A' to ;'F'
int 21h
mov ah,2
sub cl,11H ; displayLSBfor'A'to'F'
int 21h
mov ah,9
lea dx,continue ; display continue
int 21h
mov ah,1
int 21h
mov bl,al
cmp bl,'Y' ;bl = Y
jne eoj ;no, end
je continue ;yes, loop back
eoj: ; return to DOS prompt
mov ah,4ch
int 21h
main endp
end MAIN