拆分文本SQL文本

时间:2013-10-12 14:07:57

标签: sql sql-server database

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

所以我现在能够发送/接收短信并将它们存储到数据库中。 现在我正在制作一个触发器,但我完全陷入困境。

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

1站5 (int as ID,start / stop,int)

现在我的问题是,

如何定义一个拆分此记录并将ID放在action.id中的函数,将action.action中的start / stop和最后一个int放入action.time(注意:action.time被定义为int not not作为时间))

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

5 个答案:

答案 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