Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment supprimer un caractère spécifique d'une chaîne, uniquement lorsqu'il s'agit du premier ou du dernier caractère de la chaîne.

Une façon de gérer les virgules "coupantes" comme celle-ci serait d'utiliser un CASE déclaration :

CASE
    WHEN str LIKE ',%,' THEN SUBSTRING(str, 2, LEN(str)-2)
    WHEN str LIKE ',%'  THEN RIGHT(str, LEN(str)-1)
    WHEN str LIKE '%,'  THEN LEFT(str, LEN(str)-1)
    ELSE str
END

C'est très explicite :le CASE la déclaration considère trois situations -

  • Lorsque la chaîne str a des virgules des deux côtés,
  • Lorsque la chaîne str commence par une virgule, mais ne se termine pas par une, et
  • Lorsque la chaîne str se termine par une virgule, mais ne commence pas par une.

Dans le premier cas, le premier et le dernier caractères sont supprimés ; dans le second cas, le caractère le plus à gauche est supprimé; dans le dernier cas, le caractère de fin est supprimé.

Démo sur sqlfiddle.