У меня большая проблема с моей просьбой. Так, например, у меня есть сообщение:
@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you
Я хочу извлечь:
@NM1@,@NM2@,@NM3@,@NM4@.
Там может быть несколько @...@
выражения. Между @ .. @ может быть не любой символ
Я старался:
group_concat(regexp(em.value,'@[a-AA-Z0-9]*@'))
но нет результатов.
Помоги мне, пожалуйста. Любые идеи, пожалуйста !!!!!
Если предполагается, что это вопрос PHP, то строки можно найти примерно так:
<?php
$string = "@NM1@Hello@NM2@How@NM3@are@NM4@you";
preg_match_all('/@[A-Z]+[0-9]+/', $string, $matches);
print(join(",", $matches[0]))."\n";
?>
Здесь я предполагаю, что после @ идут буквенные символы, за которыми следуют цифры, поэтому сопоставляются только строки, начинающиеся с NM в вашем примере.
Если это не то, что вы хотите, пожалуйста, будьте более конкретны.
если я вас правильно понимаю
использовать функцию разделения, как эта (или другая) —
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
а затем использовать этот код
SELECT left(splitdata,len(splitdata)-1) AS substr
INTO #x1
FROM [dbo].[fnSplitString] ('@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you',' ')
WHERE splitdata LIKE '@%' AND splitdata LIKE '%@'
--SELECT * FROM #x1
GO
DECLARE cur CURSOR FAST_FORWARD READ_ONLY
FOR SELECT substr
FROM #x1
DECLARE @str varchar(100)=''
DECLARE @i varchar(10)
OPEN cur
FETCH NEXT FROM cur INTO @i
WHILE @@FETCH_STATUS=0
BEGIN
SET @str = @str+@i+','
FETCH NEXT FROM cur INTO @i
END
CLOSE cur
DEALLOCATE cur
SELECT left(@str,len(@str)-1)
DROP table #x1