2012-05-01 6 views
0

フィールド値を100文字に切り捨て、最後に...を追加するselect文を見つけようとしています。フィールドを切り捨てて「...」を追加するにはどうすればよいですか?

HundredLetterSentenceはHundredLetter Sen ...などになります。ここで私のストアドプロシージャのselectステートメントです。私はちょっとここから立ち往生している。 Select Top(1)の説明は切り捨てを行いたい場所です。

SELECT  [TI].[TicketID] 
     , CAST([TI].[Subject] AS VARCHAR(100)) [Subject] 
     , [TA].[DueDate] 
     , CAST(
        ( SELECT 
         TOP(1)  SUBSTRING(Description, 0, 100) 
         FROM  Comment 
         WHERE  TicketID = [TI].[TicketID] 
         ORDER BY CommentDate DESC 
        ) AS VARCHAR(100) 
       ) AS [Description] 
FROM  [dbo].[Ticket]  [TI] 
INNER JOIN [dbo].[Task]  [TA] 
ON   [TI].[TicketID]  = [TA].[TicketID] 
INNER JOIN [dbo].[Task_Status] [TS] 
ON   [TA].[StatusID]  = [TS].[StatusID] 
WHERE  [TI].[IsDeleted] = 0 
AND   [TS].[IsDeleted] = 0 
AND   [TS].[Status]  = 'Open' 
AND   [TI].[AssigneeView] IS NULL 
AND   [TI].[AssignedTo] = @AssignedTo 

答えて

1

があるようなもの -

SELECT CASE 
      WHEN (LEN(Table1.LongText) < 100) THEN Table1.LongText 
      ELSE SUBSTRING(Table1.LongText,1, 97) + '...' 
     END AS [Description] 
FROM Table1; 
+0

投稿を再読し、「100文字に切り詰める」と言ったのを見て、フィールドの全長を100文字にしました:) 97を100(またはクリップしたい長さ)に置き換えることができます –

1

私はここに最善の方法は、User Defined Function(UDF)を作成することだと思います。あなたはどうしたらあなたのSELECT文で次に

IF LEN(@Value)>100 
BEGIN 
    SET @Value = SUBSTRING(@Value, 0, 100) + '...' 
END 
RETURN @Value 

:あなたのようなものを持っているでしょう。このUDFで

は動作します何

SELECT [TI].[TicketID], dbo.TruncateString([TI].[Subject]) ..... 
+3

:あなたはすべてを必要とする 場合は、あなたのような何かを行うことができます。どうして?さて、トレースを起動し、多くの行を持つテーブルに対してこれを行うとどうなるかを確認します。 :-) –

0
;WITH x (d, tid, rn) AS 
(
    SELECT SUBSTRING(Description, 1, 100) + CASE 
    WHEN LEN(Description) > 100 THEN '...' ELSE '' END, 
    TicketID, rn = ROW_NUMBER() OVER 
    (PARTITION BY TicketID ORDER BY CommentDate DESC) 
    FROM dbo.Comment 
) 
SELECT [TI].[TicketID], 
    CAST([TI].[Subject] AS VARCHAR(100)) [Subject], 
    [TA].[DueDate], 
    x.d AS [Description] 
    FROM  [dbo].[Ticket] [TI] 
      INNER JOIN [dbo].[Task] [TA] ON [TI].[TicketID] = [TA].[TicketID] 
      INNER JOIN [dbo].[Task_Status] [TS] ON [TA].[StatusID] = [TS].[StatusID] 
    LEFT OUTER JOIN x ON TI.TicketID = x.tid 
    AND x.rn = 1 -- oops, forgot this important part 
    WHERE [TI].[IsDeleted] = 0 AND 
      [TS].[IsDeleted] = 0 AND 
      [TS].[Status] = 'Open' AND 
      [TI].[AssigneeView] IS NULL AND 
      [TI].[AssignedTo] = @AssignedTo; 
0

doすべてのフィールドに '...'を入れるか、実際には100文字を超えるものだけが必要です。私は実際には単純な文字列操作を実行するためにSELECTリスト内のUDFをお勧めしません

select substring(name,0,97)+'...' from... 
関連する問題