我有一个ASP.net,它根据客户端的电子邮件地址从SQL Server 2008中的存储过程请求客户端的信息,直到@
符号。由于客户经常在这个小型组织中3个月后更改,但电子邮件地址保持不变。
E.g。电子邮件地址为obois_in4@cegepoutaouais.qc.ca
的客户在3-4个月后完成其合同,然后将该电子邮件地址分配给其他人。
现在,这是我的问题:我希望我的存储过程在他/她输入obois_in4
并按下Search
按钮后查找客户端信息。我不希望他们输入整个电子邮件的原因是因为它太长了,其次他们在打字时会犯错,但是输入obois_in4
并不是什么大问题。
我编写了一个可以按名称搜索客户端的代码,但同样,客户端总是在3-4个月后更改,但电子邮件地址保持不变。
ALTER PROCEDURE [dbo].[sp_find_client_information]
-- Add the parameters for the stored procedure here
@client_email varchar (50) = null
AS Declare @numOfRows int BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @numOfRows = COUNT (*)
From helpdesk_clients
Where --change first name and
client_firstName = @client_email or client_lastName = @client_email;
begin
if (@numOfRows = 0)
select @numOfRows;
else if (@numOfRows = 1)
select
client_id,
client_firstName,
client_lastName,
client_work_email,
client_work_phone,
client_work_phone_ext,
client_office,
dept_nom,
client_position
from
helpdesk_clients join departments
on
helpdesk_clients.dept_id = departments.dept_id
where client_firstName like '%'+@client_email+'%';
end
END
电子邮件地址始终以obois
开头,后跟下划线_
,然后是部门信息技术的名称in
,然后是4
之类的数字。这个案例。例如obois_in4@cegepoutaouais.qc.ca
答案 0 :(得分:0)
我很惊讶甚至没有人打扰这个。最佳解决方案是使用Substring()
和CharIndex()
使用SUBSTRING ( expression ,start , length )
,我们可以从字符串中的位置开始截断字符串,直到字符串中的指定位置。使用CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
,我们可以找到给定字符串中字符的位置。
substring (work_email, 1, CHARINDEX('@', work_email)-1) = @work_email
确保参数不必像shawn.smith@cegepoutaouais.qc.ca
,并且客户输入完整的电子邮件(例如shawn.smith@cegepoutaouais.qc.ca
)会非常麻烦,他只需要要输入shwan.smith
,脚本将在shawn.smith
中搜索shawn.smith@cegepoutaouais.qc.ca
,直至@
。
e.g。
在存储过程中,假设@work_email
是参数,它的值是'shawn.smith'
select
client_id,
client_firstName,
client_lastName,
client_work_email,
client_work_phone,
client_work_phone_ext,
client_office,
dept_nom,
client_position
from
helpdesk_clients join departments
on
helpdesk_clients.dept_id = departments.dept_id
where substring (work_email, 1, CHARINDEX('@', work_email)-1) = @work_email;
将返回Select
声明中提到的所有详细信息。