8
votes

T-SQL: sélectionner les caractères Top N à partir d'une colonne Texte ou Ntext

Considérez un scénario où vous souhaitez tirer les dernières entrées X d'une table. La colonne que nous voulons contient des témoignages sur un produit. Pour des raisons de performance, nous voulons seulement saisir les 50 premiers caractères du témoignage. La colonne est nommée Testimonialtext et est de type texte code>.

Considérez cet extrait condensé de T-SQL: P>

SELECT TOP 10
    C.FirstName + ' ' + C.LastName AS CustomerName
    ,LEFT(C.TestimonialText,50) AS TestimonialSnippet
    ,C.TestimonialDate

FROM Customer AS C  
ORDER BY C.TestimonialDate DESC


0 commentaires

4 Réponses :


8
votes

Si vous utilisez SQL Server 2005 ou supérieur, n'utilisez pas de type de données texte, car il est déréqué. Utilisez Varchar (MAX) ou NvarchaRar (Max). Toutes les fonctions de chaîne fonctionneront. En savoir plus ici: http://msdn.microsoft.com/en-us/library /ms178158.aspx


1 commentaires

Merci Sergey, appréciez la note sur le type de données dédié.



6
votes

cherchez-vous quelque chose comme ça? Notez le casting (C.EstimonialText comme Varchar (50)) em> strud> dans l'instruction SELECT.

mytext     Snippet
---------- -------
1234567890 12345
123        123


0 commentaires

12
votes

Je pense que la sous-chaîne serait un meilleur choix. Essayez ceci: xxx


1 commentaires

Merci oiseau. Substring est le moyen d'aller si vous ne voulez pas lancer à un varchar .



1
votes

Fondamentalement, ce qui est arrivé, c'est que vous avez fourni un type de données non valide au premier paramètre de la fonction de gauche. Assurez-vous de lancer le type de données de texte comme Varchar ou Nvarchar, puis votre requête fonctionne définitivement. Voici un exemple que j'ai testé dans le SQL Server 2005

Create table #Customer

(
 firstName varchar(30)
 ,lastName varchar(30)
 ,testimonial text
 ,testimonialDate DateTime

)

GO

INSERT INTO #Customer (firstName, lastName, testimonial, testimonialDate ) VALUES('Jonhn', 'Smith', 'we really really like your product and blaha ......', getDate())
GO
INSERT INTO #Customer (firstName, lastName, testimonial , testimonialDate) VALUES('Mary', 'Toe', 'we really really like your product and blaha ......', getDate() - 3)
GO
INSERT INTO #Customer (firstName, lastName, testimonial , testimonialDate) VALUES('Amanda', 'Palin', 'we really really like your product and blaha ......', getDate() -2 )
GO

SELECT TOP 3    C.FirstName + ' ' + C.LastName AS CustomerName    ,LEFT( CAST(C.Testimonial as varchar(50)),50) AS TestimonialSnippet    ,C.TestimonialDate FROM #Customer AS C  ORDER BY C.TestimonialDate DESC
GO
Drop table #Customer
GO


0 commentaires