Scinde une chaîne en SQL Serveur à un maximum de longueur, de retour de chacun d'eux comme une ligne
Est-il un moyen de découper une chaîne (à partir d'une colonne spécifique) à n-nombre de caractères sans casser des mots, avec chaque résultat dans sa propre ligne?
Exemple:
2012-04-24 Change request #3 for the contract per terms and conditions and per John Smith in the PSO department Customer states terms should be Net 60 not Net 30. Please review signed contract for this information.
Résultats:
2012-04-24 Change request #3 for the contract per terms and conditions and per John Smith in the
PSO department Customer states terms should be Net 60 not Net 30.
Please review signed contract for this information.
Je sais que je peux utiliser charindex
pour trouver le dernier espace, mais im pas sûr de savoir comment je peux obtenir les autres et de les retourner comme des lignes.
Quel est votre longueur maximale?
Découvrez le code pour PrintMax, que j'ai trouvé ici . . . weblogs.asp.net/bdill/archive/2007/09/29/.... Il semble pour les sauts de ligne, mais vous pouvez tout aussi facilement chercher des espaces.
Jetez un oeil à Jeff Moden du Split8k la fonction ici. Qui pourrait sans doute être modifié pour faire ce que vous voulez.
ses 100
Vous pouvez toujours utiliser .NET Regex via SQL CLR UDF.
Découvrez le code pour PrintMax, que j'ai trouvé ici . . . weblogs.asp.net/bdill/archive/2007/09/29/.... Il semble pour les sauts de ligne, mais vous pouvez tout aussi facilement chercher des espaces.
Jetez un oeil à Jeff Moden du Split8k la fonction ici. Qui pourrait sans doute être modifié pour faire ce que vous voulez.
ses 100
Vous pouvez toujours utiliser .NET Regex via SQL CLR UDF.
OriginalL'auteur Daniel A. White | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela. Peut-être vous pouvez créer une fonction SQL de mise en œuvre suivantes.
Sortie sera comme ceci:
Et là vous allez. J'ai mis à jour mon code.
merci ça m'a fait commencé.
C'est tellement lent et inutile de petite taille. Par exemple, quand je veux diviser tous les 3 caractères.
Merci pour cette... c'est un de ces extraits de livre de cuisine que vous avez besoin dans votre poche arrière. j'ai utilisé cela comme une base pour quelque chose que j'ai besoin, mais aussi appris beaucoup de choses tout de jouer avec cela.
OriginalL'auteur Firoz Ansari
Juste pour voir si elle pouvait être fait, je suis venu avec une solution qui ne tourne pas en boucle. Il est basé sur quelqu'un d'autre fonction de découper une chaîne basée sur un délimiteur.
Remarque:
Cela exige de connaître le maximum de longueur de jeton à l'avance. La fonction s'arrête retour de lignes lors de la rencontre d'un jeton de plus que la ligne spécifiée longueur. Il y a probablement d'autres bugs qui rôde ainsi, afin d'utiliser ce code lors de votre propre attention.
C'est vraiment très rapide et vous pouvez faire des choses très intéressantes comme le rejoindre. Voici un exemple simple qui obtient la première "ligne" de chaque ligne dans un tableau:
Après un peu d'expérimentation, je pense que
@pLineLen
doit être au moins de la plus grande taille de jeton plus deux. Cela a un sens, parce que vous seriez la division d'un mot dans la moitié du contraire. Dans l'exemple ci-dessus, "l'information". est la longueur de 12, de sorte que@pLineLen
doit être d'au moins 14 pour obtenir tout.merci pour cette remarque. J'ai corrigé quelques bugs dans le code, alors maintenant, il doit se comporter (pour la plupart) bonne tant qu'
@pLineLen
est au moins aussi grand que le maximum de la longueur de jeton.OriginalL'auteur Chad
J'ai lu quelques articles et chacun d'eux a une erreur ou une mauvaise performance ou de ne pas travailler en petite ou grande longueur de morceau que nous voulons. Vous pouvez lire mes commentaires, même dans cet article ci-dessous de toute réponse. J'ai enfin trouvé une bonne réponse et a décidé de le partager dans cette question. Je n'ai pas vérifier les performances dans les différents scénarios, mais je pense qui est acceptable et fonctionne très bien pour les petits et gros morceau de la longueur.
C'est le code:
et la source est @Rhyno réponse à cette question: TSQL UDF De Diviser Chaque Chaîne de 8 Caractères
Espérons que cette aide.
Merci pour votre obéit, je vais vérifier dès que possible.
OriginalL'auteur QMaster
Je sais c'est un peu tard, mais une expression de table commune récursive permettrait d'atteindre cet objectif.
Aussi vous pourriez faire usage de semences un tableau contenant une séquence de chiffres pour alimenter la sous-chaîne comme un multiplicateur pour les index de début.
j'ai répondu à une question la Sécurité de l'Information du site et a obtenu 5 point négatif juste pour explique pas répondre dans le détail même, j'ai écrit quelques liens utiles en plus. Votre réponse n'est pas utile, sans expliquer, code, l'échantillon et le lien. je n'ai pas de point négatif, mais s'il vous plaît attention et de faire au mieux quand vous répondez à une question.
Je vous remercie de votre commentaire et vraiment ne souhaite que j'aie eu le temps de donner des explications à mes réponses - malheureusement l'affichage des réponses est surtout remercier moins passe-temps. J'ai pris la peine de répondre, dans ce cas, car je pensais qu'en mettant un autre point de vue serait utile, et je pense que le Tchad Henderson a fourni une réponse après qui montre CTE exemple. Personnellement je pense que les votes négatifs doivent être enregistrés pour trompeuses ou de mauvaises réponses. Sur la base du nombre de voix ma réponse a reçu, il est assis sur la clôture d'être ni utile ni incorrect.
je vois votre bonne idée et essayer de l'aider. Je veux juste faire allusion à vous parce que de mon expérience. Pouvez-vous imaginer -5 points? 🙂 Enfin un expert de l'utilisateur a décidé de supprimer la réponse et même j'ai écrit une nouvelle réponse avec explication complète sans un point +1 🙂 vous pouvez regarder ce savoir de mon honnêteté: security.stackexchange.com/questions/49315/... de toute façon je vous remercie de votre essayer et d'être ici.
OriginalL'auteur Chris Moutray