Si j'ai une chaîne qui se compose d'autres chaînes délimitées par le caractère "/" (xxx ... xxx/xxx/xxxx) comment puis-je obtenir le dernier et le dernier presque (l'avant-dernier) partie avec t -sql? Cela devrait probablement être une combinaison de charindex() et de right().Comment puis-je obtenir la quasi-dernière chaîne à partir de "/" chaîne délimitée dans T-SQL?
Répondre
declare @s varchar(50);
set @s = 'aaaaa/bbbbb/ccccc/ddddd/eeeee'
/* last one: */
select
RIGHT(@s, CHARINDEX('/', REVERSE(@s)) - 1)
/* penultimate one */
select
RIGHT(
LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s))),
CHARINDEX('/', REVERSE(
LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s)))
)) - 1
)
Le "dernier" est assez simple, pas besoin d'explication.
La « avant-dernière » est sensiblement égale à la « dernière », avec toutes les occurrences de @s
remplacé par:
LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s)))
qui produit 'aaaaa/bbbbb/ccccc/ddddd'
Pour vérifier s'il y a des barres obliques assez dans la chaîne pour que cette expression réussisse, vous pouvez le faire
CASE WHEN LEN(@s) - LEN(REPLACE(@s, '/', '')) >= 2
THEN /* expression here */
ELSE /* error value here */
END
Vous pouvez remplacer le '/' par un '.' et utilisez PARSENAME.
est ici une réponse SO utiliser: Split String in SQL
Je ne savais même pas 'ParseName()'. Bien qu'il semble qu'il ne peut gérer que jusqu'à quatre parties individuelles. – Tomalak
hey mais cela ne fonctionnera pas correctement s'il y a d'autres points (".") Dans la chaîne. et dans ce cas il y a. -1 – agnieszka
@agnieszka: vrai, mais j'ai supposé que c'était évident. –
Le parsename n'est bon que si vous avez 4 pièces ou moins. ..here est ma solution:
CREATE FUNCTION Piece(@string as varchar(1000),@delimiter as char(1),@piece as int)
RETURNS varchar(1000)
AS
BEGIN
declare @Items table (Piece int,Item varchar(8000) NOT NULL)
declare @return varchar(1000)
DECLARE @Item As varchar(1000), @Pos As int
DECLARE @piecenum AS int
SET @piecenum=1
WHILE DATALENGTH(@string)>0
BEGIN
SET @Pos = CHARINDEX(@delimiter,@string)
IF @Pos = 0 SET @Pos = DATALENGTH(@string)+1
SET @Item = LTRIM(RTRIM(LEFT(@string,@Pos-1)))
IF @Item<>'' INSERT INTO @Items SELECT @piecenum, @Item
SET @[email protected]+1
SET @string=SUBSTRING(@string,@Pos+DATALENGTH(@delimiter),1000)
END
SELECT @return=Item FROM @Items WHERE [email protected]
RETURN @return
END
donc:
select dbo.Piece('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q',',',10)
résultats dans 'j'
- 1. TSQL Obtenir une chaîne partielle de la valeur DateTime?
- 2. tsql fonction split chaîne
- 3. Extraction du premier jeton d'une chaîne délimitée
- 4. comment obtenir la valeur de chaîne à partir du fil
- 5. Obtenir la valeur de chaîne dans la classe de chaîne
- 6. Convertir la liste des listes en chaîne délimitée
- 7. Obtenir une URL à partir d'une chaîne
- 8. Comment créer une chaîne délimitée par des virgules à partir d'une ArrayList?
- 9. Conversion de la chaîne PascalCase en "Nom convivial" dans TSQL
- 10. DataSet.WriteXml à la chaîne
- 11. Nhibernate ValueType Collection en tant que chaîne délimitée dans DB
- 12. Obtenir les paramètres d'URL à partir d'une chaîne dans .NET
- 13. Comment obtenir la date de cette chaîne?
- 14. Obtenir un nombre à partir d'une chaîne de chaînes SQL
- 15. Obtenir une chaîne à partir de fichiers xml
- 16. Obtenir un tableau de chaîne à partir d'un tableau d'objets
- 17. Chaîne Java: comment obtenir la valeur de X, Y et Z à partir d'une chaîne "vt X, Y, Z"
- 18. comment obtenir la chaîne entre [LOOP] ... [/ LOOP]
- 19. Expression régulière pour obtenir un champ de conduite sinon constante chaîne délimitée par
- 20. obtenir une chaîne à partir d'un octet [] en C#
- 21. StringBuilder: comment obtenir la chaîne finale?
- 22. Regex pour trouver chaîne à l'intérieur chaîne à l'intérieur chaîne
- 23. PHP - obtenir certains mots de la chaîne
- 24. De la chaîne FullyName à l'objet Type
- 25. Obtenir la chaîne de requête complète SolrQuery
- 26. TSQL: Comment remplir une variable à l'aide d'une chaîne de commande sql générée sans curseur
- 27. Générer une chaîne délimitée par des virgules à partir d'éléments dans une zone de liste HTML (sélection multiple) avec Javascript
- 28. Comment obtenir une référence à un contrôle à partir de son nom de chaîne en C#
- 29. Chaîne à l'intérieur d'une chaîne
- 30. comment casser une chaîne dans la sous-chaîne dans Excel?
+1. C'est une bonne réponse. J'aime encore mieux le PARENAME! ;) –