Obtenir une list de symboles à partir d'une string

J'ai un gros problème avec ma request. Ainsi, par exemple, j'ai le message:

@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you 

Je veux extraire:

 @NM1@,@NM2@,@NM3@,@NM4@. 

Il peut y avoir plusieurs expressions @...@ . Entre @ .. @ ne peut être aucun caractère

J'ai essayé:

 group_concat(regexp(em.value,'@[a-AA-Z0-9]*@')) 

mais pas de résultats.

Aidez-moi, s'il vous plaît. Toutes les idées s'il vous plaît !!!!!

Si cela est supposé être une question PHP, comme indiqué, alors les strings peuvent être trouvées comme ceci:

 <?php $ssortingng = "@NM1@Hello@NM2@How@NM3@are@NM4@you"; preg_match_all('/@[AZ]+[0-9]+/', $ssortingng, $matches); print(join(",", $matches[0]))."\n"; ?> 

Ici, je suppose qu'il y a des caractères alphabétiques après le @, suivis de numbers, donc seules les strings commençant par NM dans votre exemple sont appariées.

Si ce n'est pas ce que vous voulez, veuillez être plus précis.

si je vous comprends bien, utilisez la fonction split comme celle-ci (ou une autre) –

 CREATE FUNCTION [dbo].[fnSplitSsortingng] ( @ssortingng NVARCHAR(MAX), @delimiter CHAR(1) ) RETURNS @output TABLE(splitdata NVARCHAR(MAX) ) BEGIN DECLARE @start INT, @end INT SELECT @start = 1, @end = CHARINDEX(@delimiter, @ssortingng) WHILE @start < LEN(@ssortingng) + 1 BEGIN IF @end = 0 SET @end = LEN(@ssortingng) + 1 INSERT INTO @output (splitdata) VALUES(SUBSTRING(@ssortingng, @start, @end - @start)) SET @start = @end + 1 SET @end = CHARINDEX(@delimiter, @ssortingng, @start) END RETURN END 

puis utilisez ce code

 SELECT left(splitdata,len(splitdata)-1) AS substr INTO #x1 FROM [dbo].[fnSplitSsortingng] ('@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