2017-07-03 2 views
2

Ceci est mon violon Sql avec schéma et données. SQL Query j'ai écrit fonctionne très bien et renvoie les données.Données Sql avec espace non nécessaire à droite

http://sqlfiddle.com/#!6/bcf65/4

Mais la confusion est pourquoi dois-je « l'espace » quand je jamais créé lors de l'insertion des données dans le tableau. Par exemple Voir cette partie du Code de la requête:

       (SUBSTRING 
           (
           [xml] 
           ,CHARINDEX('P',[xml]) + 3 
           ,LEN([xml])-8 
           ) 

en fonction SubString je dois retirer un peu d'espace pour obtenir le résultat LEN([xml])-8.

Supposons deux scénarios: (les deux sont de requête d'insertion SQL Fiddle)

  1. j'ai une ligne avec des données 177PKR3572427992899. Sa longueur totale est '19'. Ainsi, dans la fonction SubString utilisée ci-dessus, sa position de départ est 7, c'est-à-dire 3 après R dans Données et pour obtenir sa longueur tout en ignorant les 2 derniers chiffres, la fonction Len() doit être Len(xml)-1. Mais, à la place, je dois utiliser -8 pour passer les 2 derniers chiffres. C'est vraiment déroutant pour moi d'où vient cet espace? Voyons le deuxième maintenant. J'ai une ligne avec les données 0PKR101. Sa longueur totale est de '7'. Donc, dans la fonction SubString dans SQL Fiddle, sa position de départ est 4, c'est-à-dire 1 après R dans Data et pour obtenir sa longueur tout en ignorant les 2 derniers chiffres, la fonction Len() doit être Len(xml)-1. Mais, Au lieu de cela, je dois utiliser -6 ici pour passer les 2 derniers chiffres. Comment puis-je le faire fonctionner comme len(xml)-1 comme il devrait être ..

+0

Je suis curieux: Pourquoi appelez-vous votre colonne '[xml]', étiqueter la question en tant que telle, mais je ne peux pas voir de choses liées au XML? – Shnugo

+0

@Shnugo désolé supprimé la balise xml. Eh bien, ces valeurs sont récupérées en colonne à partir de fichiers XML, donc oui ... – ARr0w

Répondre

2

Vous avez oublié votre « 177PKR »

le 3ème argument est la longueur, et vous commencez à partir après la PKR.

Donc, votre longueur est {total length} - 2 - ({index of P}+3) qui est égale à {total length} - 8 dans le premier cas, et {total length} - 6 dans la seconde.

est ici une explication colorée: explanation

le cas général lorsque vous voulez une sous-chaîne à partir de la fin est:

substring(string, offset, length - offset - x) 

x est le décalage que vous voulez de la fin.

+0

2 - ({indice de P} +3) = -2 -7 (7 est la position de départ) = -9. quand j'utilise une valeur négative avec 'Len()' est-ce que cela supprime l'espace de gauche ou enlève l'espace de droite? – ARr0w

+1

s'il est indexé à 1, j'ai fait une erreur, alors c'est l'index de P + 2. – satibel

+0

nah, peut-être la valeur de l'indice est 0 et vous avez raison mon homme. – ARr0w