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

Oracle 新聞查詢:首條記錄紅色高亮並自動截斷標題

     編輯:Oracle 資料庫基礎

需求場景

新聞列表頁面:第一條記錄標題紅色顯示且若超過指定長度自動截斷並添加省略號;其餘記錄正常顯示,同樣超長截斷。

核心邏輯與函數解析

  • ROWNUM:識別第一條記錄(ROWNUM = 1)。
  • SIGN(LENGTH(title) - 20):判斷標題長度是否超過 20 字符。SIGN 返回 1(大於)、-1(小於)、0(等於)。
  • DECODE:條件分支。外層判斷是否為第一條,內層判斷長度是否超標。
  • SUBSTR(title, 1, 20) || '...':截取前 20 字符並拼接省略號。

完整 SQL 實現

SELECT
  DECODE(rownum, 1,
    '<font color=red>' ||
    DECODE(SIGN(LENGTH(t.Title) - 20), 1, SUBSTR(Title, 1, 20) || '...', Title) ||
    '</font>',
    DECODE(SIGN(LENGTH(t.Title) - 20), 1, SUBSTR(Title, 1, 20) || '...', Title)
  ) AS Title,
  rownum, t.*
FROM (
  SELECT * FROM Info ORDER BY UpdateTime DESC
) t
WHERE rownum < 6;

代碼解析

  1. 內層子查詢 t:按更新時間降序排列,獲取最新 5 條記錄(WHERE rownum < 6)。
  2. 外層 SELECT:使用雙層 DECODE 構建顯示邏輯。
    • 外層:ROWNUM = 1 時包裝 <font color=red>...</font>。
    • 內層:SIGN(LENGTH(Title)-20)=1 時截斷並加 ...,否則原樣輸出。

擴展建議

  • 若前端為現代 Web 應用,建議將樣式控制移至 CSS(如 :first-child 偽類),SQL 僅返回純文本與長度標誌,前端負責截斷與樣式,實現關注點分離。
  • Oracle 12c+ 可使用 FETCH FIRST 5 ROWS ONLY 替代 ROWNUM 子查詢,語法更標準。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved