1

我正在做一个小项目,但遇到了一个小障碍。

所以我目前能够发送/接收短信并将它们存储到数据库中。现在我正在研究一个触发器,但我很困在一些事情上。

文本到达表格收件箱,我需要的信息在列中:textdecoded。文本总是这样的:

1 停止 5(int 作为 ID,开始/停止,int)

现在我的问题是,

如何定义一个函数来拆分这条记录并将 ID 放在 action.id 中,将开始/停止放在 action.action 中,最后一个 int 放在 action.time 中(注意:action.time 被定义为 int 而不是时间))

在此先感谢大家:) 亲切的问候,大卫

4

5 回答 5

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

然后在创建函数之后,您可以在触发器中调用它,或者在任何其他地方调用它。

于 2013-10-12T14:21:50.557 回答
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
于 2013-10-12T14:27:02.720 回答
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
于 2013-10-12T14:30:39.627 回答
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
于 2013-10-12T14:32:10.943 回答
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

于 2013-10-12T15:20:59.313 回答