T-SQL:textまたはntext列から上位n文字を選択する

sql-server tsql
T-SQL:textまたはntext列から上位n文字を選択する

テーブルから最後のx個のエントリを取得したいシナリオを考えます。 我々が欲しいコラムは製品についての紹介文を含みます。 パフォーマンス上の理由から、紹介文から最初の50文字のみを取得します。 この列はTestimonialTextという名前で `text`型です。

T-SQLの次の要約スニペットを考えてください。

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

これによりエラーが発生します。

_
引数データ型テキストは、左関数の引数1に対して無効です。
_

質問:textまたはntext列の最初の数文字を抽出するにはどうすればいいですか?

  6  2


ベストアンサー

私はSUBSTRINGがより良い選択になると思います。 これを試して:

トップ10を選択してください

11


SQL Server 2005以降を使用している場合は、テキストデータ型を使用しないでください。 varchar(max)またはnvarchar(max)を使用してください。 すべての文字列関数が機能します。 ここでもっと読んでください:http://msdn.microsoft.com/en-us/library/ms178158.aspx

8


このようなものを探していますか? SELECTステートメントの* CAST(C.TestimonialText AS VARCHAR(50)) *に注意してください。

トップ10を選択してください

これはいくつかのテストデータです

テストデータの設定

#t VALUES( '1234567890')に挿入#t VALUES( '123')に挿入

SELECT mytext、CAST(mytext as varchar(5))ASスニペットから#t

結果

mytextの抜粋---------- ------- 1234567890 12345 123 123

6


基本的には、LEFT関数の最初のパラメータに無効なデータ型を指定したということです。 必ずテキストデータ型をvarcharまたはnvarcharとしてキャストしてください。そうすれば、クエリーは確実に機能します。 これは、SQL Server 2005でテストした例です。

テーブル#Customerを作成

(firstName varchar(30)、lastName varchar(30)、紹介文のテキスト、testimonialDate DateTime

)

GO

#Customer(firstName、lastName、testimonial、testimonialDate)値( 'Jonhn'、 'Smith'、 '私たちは本当にあなたの製品とblaha ......'を気に入っています。、getDate())INSERT INTO #Customer( firstName、lastName、紹介文、testimonialDate)値( 'Mary'、 'Toe'、 '私たちは本当にあなたの製品とblaha ......を気に入っています。'、getDate() -  3)GO INSERT INTO #Customer(firstName、lastName) VALUES( 'Amanda'、 'Palin'、 '私たちは本当にあなたの製品とblahaを気に入っています......'、getDate()-2)GO

SELECT TOP 3 C.FirstName '' C.LastName AS CustomerName、左(CAST(C.Char.Testimonial as varchar(50))、50)AS TestimonialSnippet、C.TestimonialDateから#顧客のAS CオーダーによるC.TestimonialDate DESC GOドロップテーブル#カスタマーGO

1


タイトルとURLをコピーしました