2 votes

T SQL comment modifier une chaîne de caractères en supprimant toute la partie située après le dernier délimiteur

J'ai du mal à trouver les bonnes fonctions avec SQL Server 2008 pour rectifier les chaînes de caractères : \\myserver\mydir1\dir2\test.txt o \\myserver2\dir1\dir2\dir3\test.txt .

Au final, le résultat devrait ressembler à ce qui suit : \\myserver\mydir1\dir2 o \\myserver2\dir1\dir2\dir3 Ainsi, après le dernier "\" la sous-chaîne doit être supprimée.

Une idée sur la manière de procéder ?

3voto

gbn Points 197263
DECLARE @urls TABLE (URL varchar(2000))

INSERT @urls VALUES ('\\myserver\mydir1\dir2\test.txt')
INSERT @urls VALUES ('\\myserver2\dir1\dir2\dir3\test.txt')

SELECT
    REVERSE(SUBSTRING(REVERSE(URL), CHARINDEX('\', REVERSE(URL))+1, 8000))
FROM
    @urls

Logique :

  • \\myserver\mydir1\dir2\test.txt
  • INVERSE = txt.tset\2rid\1ridym\revresym\
  • rechercher en premier lieu \
  • prend tout ce qui suit SUBSTRING = 2rid\1ridym\revresym\
  • INVERSE = \\myserver\mydir1\dir2

Vous n'avez pas besoin de connaître la LEN de la chaîne pour le SUBSTRING, alors utilisez simplement 8000.

Modification, après le commentaire sur l'utilisation de 8000

  1. Vous pouvez utiliser 2147483647 dans SUBSTRING parce qu'il prend en charge les types max.
  2. Doit seulement être égal ou supérieur à la longueur de la variable varchar ou de la colonne.
  3. Qu'en est-il des frais généraux liés au calcul de LEN ?
  4. Pratiquement tous les URL doivent s'inscrire dans 2083 octets
  5. Est-ce important ? "Optimisation prématurée", etc.

0voto

trydis Points 1822
DECLARE @input VARCHAR(50)
SET @input = '\\myserver\mydir1\dir2\test.txt'

SELECT SUBSTRING(@input, 1, LEN(@input) - CHARINDEX('\', REVERSE(@input)));

0voto

Yuck Points 23174
DECLARE @s VarChar(100) = '\myserver\mydir1\dir2\test.txt';

DECLARE @length Int = LEN(@s),
        @position Int = CHARINDEX('\', REVERSE(@s));

SELECT SUBSTRING(@s, 1, @length - @position);

0voto

Jeffrey Kevin Pry Points 2171

Essayez quelque chose comme ceci...

SELECT CASE SUBSTRING ( [yourField], LEN([yourField])-2, LEN([yourField])-1)
WHEN '\' THEN (SUBSTRING ( [yourField], 0, LEN([yourField])-1))
ELSE [yourField]

End
  FROM [yourTable]
GO

J'espère que cela vous aidera,

Jeffrey Kevin Pry

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X