0

フィールド値を 100 文字に切り捨て、その末尾に ... を追加する select ステートメントを見つけようとしています。

HundredLetterSentence は HundredLetter Sen になります... またはそのようなものです。これが、ストアド プロシージャの select ステートメントです。私はここからちょっと立ち往生しています。Select TOP(1) Description は、切り捨てを行いたい場所です。

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
4

4 に答える 4

1

ここでの最善の方法は、ユーザー定義関数(UDF)を作成することだと思います。

この UDF では、次のようになります。

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

次に、SELECTステートメントで次のようにします。

SELECT [TI].[TicketID], dbo.TruncateString([TI].[Subject]) .....
于 2012-05-01T16:24:28.030 に答える
1

うまくいくのは次のようなものです-

SELECT CASE 
           WHEN (LEN(Table1.LongText) < 100) THEN Table1.LongText
           ELSE SUBSTRING(Table1.LongText,1, 97) + '...'
       END AS [Description]
FROM Table1;
于 2012-05-01T16:42:15.237 に答える
0

すべてのフィールドに「...」が必要ですか、それとも実際に 100 文字を超えるフィールドのみが必要ですか。すべてが必要な場合は、次のようなことができます。

select substring(name,0,97)+'...' from...
于 2012-05-01T16:50:46.247 に答える
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;
于 2012-05-01T16:37:00.753 に答える