我正在开展一个小项目,但遇到了一个小障碍。
所以我现在能够发送/接收短信并将它们存储到数据库中。 现在我正在制作一个触发器,但我完全陷入困境。
文本到达表格收件箱,我需要的信息在列中:textdecoded。文本总是如下:
1站5 (int as ID,start / stop,int)
现在我的问题是,
如何定义一个拆分此记录并将ID放在action.id中的函数,将action.action中的start / stop和最后一个int放入action.time(注意:action.time被定义为int not not作为时间))
先谢谢大家:) 亲切的问候, 大卫
答案 0 :(得分:1)
如果你正在使用SQL Server
,你可以这样做:
CREATE FUNCTION PARSE_STRING(@text NVARCHAR(MAX))
AS
BEGIN
INSERT INTO --yourTable--
SELECT
SUBSTRING(@text, 0, PATINDEX('%st%', @text)),
SUBSTRING(@text, PATINDEX('%st%', @text), CHARINDEX(' ', SUBSTRING(@text, PATINDEX('%st%', @text), LEN(@text)))),
SUBSTRING(@text, CHARINDEX(' ', SUBSTRING(@text, PATINDEX('%st%', @text), LEN(@text))) + LEN(@text) - LEN(SUBSTRING(@text, PATINDEX('%st%', @text), LEN(@text))), LEN(@text))
END
此外,这是一个有效的 SQLFiddle 。
然后在创建该功能后,您可以在触发器中或其他任何您想要的地方调用它。
答案 1 :(得分:1)
select case when column_name like '%stop%' then
substring('column_name ' ,1,charindex('stop','column_name ',1)-1)
,'stop'
,substring('column_name ' ,charindex('stop','column_name ',1)+5,1
)
case when column_name like '%start%' then
substring('column_name ' ,1,charindex('start','column_name ',1)-1)
,'start'
,substring('column_name ' ,charindex('start','column_name ',1)+6,1
)
from table_name
答案 2 :(得分:1)
DECLARE @Inbox as varchar(15)
SET @Inbox = '1 start 5'
SELECT SUBSTRING(@Inbox,1,PATINDEX('% %',@Inbox)) AS ID,
SUBSTRING(@Inbox,PATINDEX('% %',@Inbox),PATINDEX('% %',RIGHT(@Inbox,LEN(@Inbox)-PATINDEX('% %',@Inbox)))) AS Action,
RIGHT(@Inbox,PATINDEX('% %',REVERSE(@Inbox))) AS ActionTime
答案 3 :(得分:1)
尝试此触发器:
create trigger inbox_cascade
on inbox
for insert
as
begin
declare @txt varchar(max)
declare @cmd nvarchar(max)
declare c cursor for select replace(textdecoded,' ',''',''') from inserted
open c
fetch next from c into @txt
while @@fetch_status=0
begin
set @cmd='insert into action (id,action,time) values('''+@txt+''')'
exec sp_executesql @cmd
fetch next from c into @txt
end
close c
deallocate c
end
答案 4 :(得分:0)
好吧,经过一番激烈的思考并休息后,我得到了以下内容:
declare @failureId int
declare @action varchar(200)
declare @time int
declare @input varchar(200)
declare @input2 varchar(200)
declare @alertId int
select @input = (select textdecoded from inserted)
select @failureId = substring(@input, 1, charindex(' ',@input)-1)
select @input2 = substring(@input, charindex(' ',@input)+1, LEN(@input) - charindex(' ', @input)+1)
select @action = substring(@input2, 1, charindex(' ', @input2)-1)
select @time = substring(@input2, charindex(' ',@input2)+1, LEN(@input) - charindex(' ', @input)+1)
select @alertId = (select id from Alert where failureId = @failureId)
insert into Action values (@alertId, @failureId, @action, @time)
我意识到它不是一段完美的代码,但它对我有用:) 感谢大家对此事的帮助:)你的建议和想法给了我所需的推动力:D
很多人感谢:D