1
votes

Sous-chaîne SQL Server sans limite supérieure

Quelle est la meilleure façon dans SQL Server de faire

SELECT 
    SUBSTRING('CATCH ME IF YOU CAN', 2, 10000)
    -- ATCH ME IF YOU CAN

sans limite supérieure?


0 commentaires

3 Réponses :


5
votes

Utilisez plutôt STUFF ( STUFF (Transact-SQL) ):

SELECT STUFF('2019-07-09 11:38:00',11,1,'T');

Ici, STUFF remplace 1 caractère, de position 1 avec la chaîne '' . Le 2ème paramètre est la position de départ et le 3ème est le nombre de caractères (à partir de cette position) à remplacer. La quatrième est la chaîne de remplacement.

Donc, comme exemple supplémentaire, vous pouvez faire quelque chose comme ceci:

SELECT STUFF('CATCH ME IF YOU CAN',1,1,'');

Ceci remplace 1 caractère de la position 11 avec le caractère 'T' , qui renvoie '2019-07-09T11: 38: 00' , en changeant la valeur ci-dessus au format ISO8601. Comme vous pouvez le voir, la longueur de la chaîne à remplacer n'a pas besoin d'être la même longueur que la chaîne de remplacement (en fait, le 3ème paramètre peut avoir une valeur de 0 , ce qui signifie que non les caractères sont remplacés et la chaîne de "remplacement" est simplement injectée dans la valeur existante).


4 commentaires

SELECT STUFF ('/ KKBGC / CHBusinessUmsatz', 1, LEN ('/ KKBGC'), '') renvoie / CHBusinessUmsatz


@LudovicAubert Pourquoi avez-vous une fonction LEN là-dedans? Qu'est-ce que votre commentaire essaie de dire?


C'est le cas d'utilisation qui m'a poussé à poser cette question en premier lieu.


Il existe probablement des équivalents dans d'autres dialectes SQL, @LudovicAubert. Un Google m'a montré que MySQL a la fonction INSERT () < / code>: Quel est l'équivalent MySQL de STUFF ( ) dans SQL Server?



2
votes

Utilisation de LEN () avec la variable

SELECT SUBSTRING('CATCH ME IF YOU CAN', 2, LEN('CATCH ME IF YOU CAN'));

ou directement avec LEN()

DECLARE @Val AS VARCHAR (MAX) = 'CATCH ME IF YOU CAN';
SELECT SUBSTRING(@Val, 2, LEN(@Val));


0 commentaires

0
votes

Vous pouvez utiliser Fonction RIGHT () , combinée avec LEN () .
Tout ce que vous avez à faire est de soustraire de LEN () le nombre de caractères que vous souhaitez exclure du début de la chaîne:

SELECT RIGHT('CATCH ME IF YOU CAN', LEN('CATCH ME IF YOU CAN') - 1)


0 commentaires