Как получить слова из поля в SQL Server 2008 - PullRequest
0 голосов
/ 28 октября 2010

Мне нужно получить слова в текстовом поле и сделать некоторые обновления с этими словами, например:

исходные данные

words        | other field    | another field
---------------------------------------------
white        |                |
some words   |                |
some other w |                |

желаемый результат

words        | other field    | another field
---------------------------------------------
white        |                |
some         | words          |
some         | other          | w

Как мне это сделать?

EXTRA

У меня есть этот запрос, где я получаю, сколько словполе имеет

select nombre, 
       LEN(words) - LEN(REPLACE(words, ' ', ''))+1 as palabras
  from origen_informacion
 where words <> ''

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Если вы пытаетесь разбить строку через пробел, вы можете использовать эту функцию:

create function fn_ParseCSVString
(
@CSVString  varchar(8000) ,
@Delimiter  varchar(10)
)
returns @tbl table (s varchar(1000))
as
/*
select * from dbo.fn_ParseCSVString ('qwe rew wer', ',c,')
*/
begin
declare @i int ,
    @j int
    select  @i = 1
    while @i <= len(@CSVString)
    begin
        select  @j = charindex(@Delimiter, @CSVString, @i)
        if @j = 0
        begin
            select  @j = len(@CSVString) + 1
        end
        insert  @tbl select substring(@CSVString, @i, @j - @i)
        select  @i = @j + len(@Delimiter)
    end
    return
end


GO

И передайте '' в качестве разделителя.

select * from dbo.fn_ParseCSVString ('qwe rew wer', ' ')
1 голос
/ 02 декабря 2010

В SQL Server 2008 вы можете использовать sys.dm_fts_parser, чтобы разбить строку на слова.Вы можете включить это с cross apply.

DECLARE @data TABLE 
(
id INT IDENTITY(1,1) PRIMARY KEY,
words VARCHAR(1000),
other_field VARCHAR(1000),
another_field VARCHAR(1000)
)

INSERT INTO @data (words) 
VALUES ('white'),('some words'),('some other w '),('This sentence has 5 words');

WITH splitData AS
(
SELECT 
       id ,
       max(case when occurrence = 1 then display_term end) as word1,
       max(case when occurrence = 2 then display_term end) as word2,
       max(case when occurrence = 3 then display_term end) as word3,
       max(case when occurrence = 4 then display_term end) as word4       
FROM @data
CROSS APPLY sys.dm_fts_parser('"' + REPLACE(words,'"','') + '"',1033,NULL,0)
GROUP BY id
HAVING MAX(occurrence) <= 4
)
UPDATE @data
SET words = word1, other_field=word2, another_field=word3 + ISNULL(' ' + word4,'')
FROM @data d1
JOIN  splitData sd ON d1.id = sd.id

SELECT * FROM @data

Выход

id     words                          other_field     another_field
------ ------------------------------ --------------- --------------
1      white                          NULL            NULL
2      some                           words           NULL
3      some                           other           w
4      This sentence has 5 words      NULL            NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...