J'ai besoin d'analyser le répertoire à 5 niveau dans SQL Server avec une fonction de chaîne.
\ABC\BC\ADS\ADS\123\ \ABC\BC\ADS\ADS\156\ \ABC\BC\ADS\ADS\179\
3 Réponses :
Vous pouvez essayer cela. En utilisant Après cette utilisation Vous pouvez créer votre propre fonction code> divisée code> pour vous assurer que la commande ne changera pas dans l'analyse . P> string_split code>, vous pouvez convertir votre chaîne en lignes, puis recherchez les enregistrements supérieurs en tant que besoin dans votre code pour obtenir le résultat souhaité. Stuff code> à nouveau concaténer dans une seule chaîne et obtenir votre sortie. p>
GO
CREATE FUNCTION [dbo].[Split]
(@String nvarchar(max), @Delimiter char(1))
RETURNS @Results TABLE (Items varchar(200))
AS
BEGIN
DECLARE @INDEX INT
DECLARE @SLICE nvarchar(max)
-- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z
-- ERO FIRST TIME IN LOOP
SELECT @INDEX = 1
WHILE @INDEX !=0
BEGIN
-- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
IF @INDEX !=0
SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
ELSE
SELECT @SLICE = @STRING
-- PUT THE ITEM INTO THE RESULTS SET
INSERT INTO @Results(Items) VALUES(@SLICE)
-- CHOP THE ITEM REMOVED OFF THE MAIN STRING
SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
-- BREAK OUT IF WE ARE DONE
IF LEN(@STRING) = 0 BREAK
END
RETURN
END
GO
Documentation sur string_split code> stipule que ... Les rangées de sortie peuvent être dans n'importe quel ordre. La commande n'est pas garantie de correspondre à l'ordre des substrings dans la chaîne d'entrée ... i>. Je ne suis pas sûr que string_split code> est une option ici.
Si vous êtes autorisé à créer une fonction de base de données, vous pouvez atteindre vos données requises.
Créer une fonction: strong> p> ceci ci-dessus La fonction retournera la nième position d'un caractère dans la chaîne fournie. Au fur et à mesure que vous avez besoin du chemin jusqu'au niveau 5, j'ai trouvé la 6ème position de caractère "\" et conserve la chaîne jusqu'à cette position à l'aide de la méthode de sous-chaîne. P> SELECT
SUBSTRING
(
<db column name>,
1,
CASE
WHEN [dbo].[find_nth_char_position]('\',<db column name>,6) = 0 THEN LEN(<db column name>)
ELSE [dbo].[find_nth_char_position]('\',<db column name>,6)
END
)
FROM <your_table>
Mkrabbani ... Cela fonctionne, mais le problème est que le niveau n'est que 3 ou de niveau, alors il n'est pas donné en sortie.
Attendez une minute .. Changer la logique.
@Pragnehprajapati pouvez-vous vérifier maintenant?
Cela donne une erreur .... Type de données d'argument Nvarchar (MAX) n'est pas valide pour l'argument 3 de la fonction de sous-chaîne.
Désolé pour la confusion @pragnehprajapati. Mise à jour de la définition de la fonction et sélectionnez Script. S'il vous plaît essayez après modifier votre fonction en conséquence.
:( Pouvez-vous vérifier cette sortie de violon - dbfiddle.uk/...
Son travail comme prévu chez moi et dans le dbfiddle aussi. @PAGNESHPRAJAPATI
Vous pouvez essayer avec l'approche suivante:
Tableau: p> Énoncé: p> sortie: p>
Veuillez me suggérer une fonction que je peux utiliser dans SQL Server.
Cela va être difficile à balancer sans support de regex (ce qui tristes SQL Server n'est pas vraiment expédié avec ... encore). Vous voudrez peut-être gérer cela dans votre couche d'application.
Peut-être que c'est possible avec la requête.
Donc, ces enregistrements sont dans une colonne
Quelle est la version SQL Server?