拆分文本SQL文本

拆分文本SQL文本,sql,sql-server,database,Sql,Sql Server,Database,我正在做一个小项目,但遇到了一个小障碍 因此,我目前能够发送/接收短信并将其存储到数据库中。 现在我正在做一个扳机,但我被什么东西卡住了 文本到达表格收件箱,我需要的信息在:textdecoded列中。文本总是类似于: 一站五 (int作为ID,启动/停止,int) 现在我的问题是, 如何定义一个函数来拆分此记录,并将ID放入action.ID、start/stop放入action.action,最后一个int放入action.time(注意:action.time定义为int而不是time))

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

因此,我目前能够发送/接收短信并将其存储到数据库中。 现在我正在做一个扳机,但我被什么东西卡住了

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

一站五 (int作为ID,启动/停止,int)

现在我的问题是,

如何定义一个函数来拆分此记录,并将ID放入action.ID、start/stop放入action.action,最后一个int放入action.time(注意:action.time定义为int而不是time))

提前谢谢大家:) 亲切问候,,
David

如果您使用的是
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
此外,这里还有一个正在工作的


创建函数后,您可以在触发器中调用它,或者在任何您喜欢的地方调用它。

如果您使用的是
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
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
此外,这里还有一个正在工作的

创建函数后,可以在触发器中调用它,也可以在任何您喜欢的地方调用它。

尝试此触发器:

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
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
尝试此触发器:

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

好的,经过一些紧张的思考和休息之后,我得到了以下信息:

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

好的,经过一些紧张的思考和休息,我得到了以下信息:

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

哦,什么是数据库收件箱?到目前为止我什么都没有,可能是忙了太久,但我真的希望在周一之前完成。数据库收件箱应该是表收件箱:)谢谢澄清。请看我的答案。哦,什么是数据库收件箱?我到目前为止什么都没有,可能是工作时间太长了,但我真的希望在周一之前完成。数据库收件箱应该是表收件箱:)谢谢澄清。请看我的答案。哦,还有一秒钟,我得稍微调整一下:-)。我还将发布一个指向工作小提琴的链接。哦,还有一秒钟,我必须稍微调整一下:-)。我还将发布一个指向工作小提琴的链接。
from inbox
应该是
from inserted
,否则,如果inbox包含多条记录,语句将中断。另外,您的触发器不能处理插入多条记录的操作。
从收件箱
应该是
从插入的
,否则,如果收件箱包含多条记录,则语句将中断。另外,触发器不能处理插入多个记录的操作。