2009-08-02 10 views
6

एक परिदृश्य पर विचार करें जहां आप तालिका से अंतिम x प्रविष्टियों को खींचना चाहते हैं। हमारे इच्छित कॉलम में उत्पाद के बारे में प्रशंसापत्र शामिल हैं। प्रदर्शन कारणों से, हम केवल प्रशंसापत्र से पहले 50 वर्णों को पकड़ना चाहते हैं। कॉलम का नाम TestimonialText है और text टाइप किया गया है।टी-एसक्यूएल: टेक्स्ट या एनटेक्स्ट कॉलम से शीर्ष एन वर्णों का चयन

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 

यह एक त्रुटि पैदा करता है:

T-SQL के इस गाढ़ा टुकड़ा पर विचार करें

Argument data type text is invalid for argument 1 of left function.

प्रश्न: कैसे सिर्फ पहले कुछ n पाठ या ntext के पात्रों को निकालने के लिए स्तंभ?

उत्तर

10

मुझे लगता है कि SUBSTRIN है जी बेहतर विकल्प होगा। इसे आज़माएं:

SELECT TOP 10 
    C.FirstName + ' ' + C.LastName AS CustomerName 
    ,SUBSTRING(C.TestimonialText,1,50) AS TestimonialSnippet 
    ,C.TestimonialDate 
FROM Customer AS C 
ORDER BY SUBSTRING(C.TestimonialText,1,50) DESC 
+1

धन्यवाद पक्षी। यदि आप 'वर्कर' में नहीं डालना चाहते हैं तो 'सबस्ट्रिंग' जाने का तरीका है। –

8

यदि आप SQL Server 2005 या ऊपर का उपयोग करते हैं, तो टेक्स्ट डेटाटाइप का उपयोग न करें, क्योंकि यह वंचित है। वर्कर (अधिकतम) या nvarchar (अधिकतम) का प्रयोग करें। सभी स्ट्रिंग फ़ंक्शन काम करेंगे। यहां और पढ़ें: http://msdn.microsoft.com/en-us/library/ms178158.aspx

+0

धन्यवाद सर्गेई, चित्रित डेटाटाइप के बारे में नोट की सराहना करते हैं। –

6

क्या आप इस तरह कुछ ढूंढ रहे हैं? CAST (C.TestimonialText AS VARCHAR (50)) SELECT कथन में नोट करें।

SELECT TOP 10 
    C.FirstName + ' ' + C.LastName AS CustomerName, 
    CAST(C.TestimonialText AS VARCHAR(50)) AS TestimonialSnippet, 
    C.TestimonialDate 
FROM Customer AS C 
ORDER BY C.TestimonialDate DESC 

यहाँ कुछ परीक्षण डाटा

टेस्ट डेटा सेटअप

create table #t (mytext text) 
insert into #t VALUES ('1234567890') 
insert into #t VALUES ('123') 

SELECT 
    mytext, 
    CAST(mytext as varchar(5)) AS Snippet 
FROM #t 

परिणाम

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

असल में क्या खुशी है कि आपने LEFT फ़ंक्शन के पहले पैरामीटर में अमान्य डेटा प्रकार प्रदान किया है। सुनिश्चित करें कि आपने टेक्स्ट डेटा प्रकार को वर्चर या nvarchar के रूप में डाला है, तो आपकी क्वेरी निश्चित रूप से काम करती है। यहां एक उदाहरण है जिसे मैंने 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 
संबंधित मुद्दे