新聞列表頁面:第一條記錄標題紅色顯示且若超過指定長度自動截斷並添加省略號;其餘記錄正常顯示,同樣超長截斷。
ROWNUM:識別第一條記錄(ROWNUM = 1)。SIGN(LENGTH(title) - 20):判斷標題長度是否超過 20 字符。SIGN 返回 1(大於)、-1(小於)、0(等於)。DECODE:條件分支。外層判斷是否為第一條,內層判斷長度是否超標。SUBSTR(title, 1, 20) || '...':截取前 20 字符並拼接省略號。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;
t:按更新時間降序排列,獲取最新 5 條記錄(WHERE rownum < 6)。SELECT:使用雙層 DECODE 構建顯示邏輯。
ROWNUM = 1 時包裝 <font color=red>...</font>。SIGN(LENGTH(Title)-20)=1 時截斷並加 ...,否則原樣輸出。:first-child 偽類),SQL 僅返回純文本與長度標誌,前端負責截斷與樣式,實現關注點分離。FETCH FIRST 5 ROWS ONLY 替代 ROWNUM 子查詢,語法更標準。