Je veux imprimer l'une des chaînes de condition suivantes si elle contient Number = '12908,13232323'
3 Réponses :
J'utilise une fonction Split CTE
DECLARE @Condition varchar(max) = 'Number =''12908,13232323,12122'' AND Name=''Mak''' DECLARE @Condition1 varchar(max) = 'Address=''UK'' AND Number =''12908'' AND Name=''Mak''' DECLARE @Condition2 varchar(max) = 'Number =''12908,13232323''' DECLARE @Table AS TABLE (ID INT, Condition varchar(MAX)) INSERT INTO @Table VALUES (0,@Condition),(1,@Condition1),(2,@Condition2); WITH CTE AS ( SELECT T.*, C.value,COUNT(1) OVER (PARTITION BY ID) Cnt FROM @Table T CROSS APPLY dbo.fn_string_split(Condition,'AND') C ) SELECT * FROM cte WHERE Cnt=1 AND LEFT(REPLACE(value,' ',''),7) = 'Number='
Essayé ce qui suit et fait le travail effectué.
DECLARE @Condition varchar(max) = 'Number =''12908,13232323,12122'' AND Name=''Mak''' DECLARE @Condition1 varchar(max) = 'Address=''UK'' OR Number =''12908'' AND Name=''Mak''' DECLARE @Condition2 varchar(max) = 'Number =''12908,13232323''' IF REPLACE(REPLACE(@Condition,' OR ',' @ '),' AND ',' @ ') NOT LIKE '%@%' BEGIN PRINT(@Condition); END ELSE IF REPLACE(REPLACE(@Condition1,' OR ',' @ '),' AND ',' @ ') NOT LIKE '%@%' BEGIn PRINT(@Condition1); END ELSE IF REPLACE(REPLACE(@Condition2,' OR ',' @ '),' AND ',' @ ') NOT LIKE '%@%' BEGIn PRINT(@Condition2); END ELSE BEGIN PRINT('none'); END
Utiliser comme trouver "numéro" sans "et". requête p>
SQL Server n'est pas votre ami pour cela; C'est affreux de la manipulation des chaînes. Si vous avez besoin de faire quelque chose comme ça, dans votre application est le bon endroit. Cela (en vérité) a la sensation du problème XY.
Peut-être une simplification excessive, mais pourrait-elle suffire à simplement chercher des conditions contenant le mot «nombre» et non le mot «et»?