2015-05-29 70 views

回答

0

这会给你从列用户名

SET columnName= select SUBSTRING(columnName, CHARINDEX('-',columnName)+1 , LEN(columnName)) 

使用它在触发

编辑1:(如果你担心你的邮件可能包含-

SET columnName= select SUBSTRING(columnName, CHARINDEX(':-',columnName)+2 , LEN(columnName)) 
+1

如果电子邮件包含字符' - ',这不是一个好方法! – Max

+0

检查编辑,电子邮件不可能包含':-' –

0

您需要在你的桌子和触发器身体上创建一个AFTER INSERT触发器,使用类似于下面的东西来剥离电子邮件部分

select right('[email protected]:-JSmit',(LEN('[email protected]:-JSmit') - CHARINDEX('-','[email protected]:-JSmit'))) 
+1

你应该改变'CHARINDEX(' - ''为'CHARINDEX(': - ''看到我的评论@Pravin Deshmukh – Max

1

下面是创建所描述的触发器的语法:

测试表:

CREATE TABLE xx(UserName varchar(100)) 

你将不得不扩大触发包含所有列。

触发语法:

CREATE TRIGGER xx_trggr 
ON xx 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT INTO xx (UserName) 
    SELECT stuff(UserName, 1, charindex(':-', UserName) + 1, '') 
    FROM inserted 
END 
GO 

插入数据:

INSERT xx(UserName) 
values 
('[email protected]:-JSmit'), 
('[email protected]:-JanSmit'), 
('[email protected]:-PPark') 

测试输入:

SELECT UserName FROM xx 

结果:

UserName 
JSmit 
JanSmit 
PPark 

你可以做一个触发,而不是之后,但这需要一个唯一的密钥

使用此表来代替:

CREATE TABLE xx(id int identity(1,1), UserName varchar(100)) 

这触发:

CREATE TRIGGER xx_trggr 
ON xx 
AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE xx 
    SET [UserName] = stuff(xx.UserName, 1, charindex(':-', xx.UserName) + 1, '') 
    FROM inserted JOIN xx On inserted.id = xx.id 
END 

相同的结果其他触发。

+2

看看其他答案的意见!电子邮件地址可以包含 - 符号。 –

+0

@GaborRajczi好的,谢谢,补偿那寻找*: - *代替 –