首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 字串截斷技巧:將超長文字以省略號顯示

     編輯:關於SqlServer

前言

在開發文章列表或報表時,標題過長會破壞版面美觀。常見的解決方案是將超過固定長度的文字截斷,並以省略號(...)結尾。本文介紹如何在 SQL 查詢中實現此功能,涵蓋 Access 與 SQL Server 的差異。

核心邏輯

基本思路是:判斷欄位長度是否超過閾值,若超過則取左側指定字元數並附加「...」,否則原樣輸出。可使用 UNION ALL 合併兩種情況的結果集。

SQL Server 寫法(使用 DATALENGTH)

SELECT LEFT(原欄位, 位數) + '...' AS 新欄位
FROM 表名
WHERE DATALENGTH(原欄位) > 位數
UNION ALL
SELECT 原欄位 AS 新欄位
FROM 表名
WHERE DATALENGTH(原欄位) <= 位數

Access 相容寫法(使用 LEN)

Access 不支援 DATALENGTH(),需改用 LEN()。注意:LEN() 將中英文字元都視為 1 位,而 DATALENGTH 中文佔 2 位元組。若需精確按位元組截斷,Access 中需額外處理。

SELECT LEFT(原欄位, 位數) + '...' AS 新欄位
FROM 表名
WHERE LEN(原欄位) > 位數
UNION ALL
SELECT 原欄位 AS 新欄位
FROM 表名
WHERE LEN(原欄位) <= 位數

實戰範例:分頁查詢並截斷描述欄位

以下範例從 xjx 表中取出「活動簡報」類別的前 5 筆資料,將 description 欄位超過 25 字元的部分以省略號表示:

SELECT TOP 5 * FROM (
    SELECT id,
           (LEFT([description], 25) + '...') AS descriptionx,
           kind, datetime, description, author, hit
    FROM [xjx]
    WHERE LEN(description) > 25
    UNION ALL
    SELECT id,
           description AS descriptionx,
           kind, datetime, description, author, hit
    FROM [xjx]
    WHERE LEN(description) <= 25
) TempTable
WHERE kind = '活動簡報'
ORDER BY datetime

效能與替代方案

上述寫法需掃描兩次表。在 SQL Server 2012+ 可使用 IIF 或 CASE 搭配 LEFT 單次掃描完成;或在應用層處理截斷,減少資料庫負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved