1. substr函數使用
substr函數格式 (俗稱:字符截取函數)
格式1: substr(string string, int a, int b);
格式2:substr(string string, int a) ;
格式1:
1、string 需要截取的字符串
2、a 截取字符串的開始位置(注:當a等於0或1時,都是從第一位開始截取)
3、b 要截取的字符串的長度
格式2:
1、string 需要截取的字符串
2、a 可以理解為從第a個字符開始截取后面所有的字符串。
注:https://www.cnblogs.com/dshore123/p/7805050.html
2. dbms_lob.substr函數使用
CLOB里存的是2進制
判定長度 dbms_lob.getlength(col1)
獲取文本 dbms_lob.substr(col1,n,pos)
dbms_lob.substr(col1,10,1)表示從第1個字節開始取出10個字節
注:https://blog.csdn.net/daxiang12092205/article/details/20283359
-- dbms_lob.substr函數第二個參數有時不能為4000(3960或3000),有時可以(測試數據4000個英文字符)
select dbms_lob.substr(a.txt,3000,1),length(a.txt),DBMS_LOB.getlength(a.txt),a.* from jc_content_txt a
-- 測試表,DBMS_LOB.SUBSTR為4000或5000均可
select DBMS_LOB.SUBSTR(txt,5001) from jc_content_txt_test
以上問題可結合eclipse、jdbc、oracle做一個測試。
dbms_lob.substr第二個參數是要從大型對象中抽取的字節數,這樣可以理解測試sql中的4000或5000。
而第一條sql中第二個參數不能為4000(3960或3000),估計是超過varchar2的4k限制(4k指字節還是字符),4k指的是字節。而DBMS_LOB.SUBSTR第二個參數指的是字符的個數(通過測試可驗證),它會轉成varchar2。
dbms_log.substr的第二個參數是字符數,非字節。
https://blog.csdn.net/swordmanwk/article/details/6204611
http://www.voidcn.com/article/p-tvbhgpdf-byk.html
https://www.thinbug.com/q/1797183
https://www.cnblogs.com/Tty725/p/13750663.html
https://blog.csdn.net/e_wsq/article/details/7068091
https://www.cnblogs.com/grand-jon/p/7389427.html
https://blog.csdn.net/yfleng2002/article/details/7794784
https://www.cnblogs.com/zhixie/p/11968710.html
3.case when 使用
CASE
WHEN to_char(a.issuedt,'yyyy-mm-dd hh24:mi:ss') = '1900-01-01 00:00:00' THEN ''
ELSE to_char(a.issuedt,'yyyy-mm-dd hh24:mi:ss')
END issuedt ,
注:issuedt是日期類型,該值默認是原點時間。需求是如果是原點時間,則為空。
4. case when 結合getlength
SELECT *
FROM
(SELECT A.GUESTBOOK_ID AS ID,
A.SITE_ID AS SITEID,
A.CREATE_TIME AS CREATETIME,
A.IS_CHECKED AS ISCHECKED,
A.IS_RECOMMEND AS ISRECOMMEND,
B.TITLE,
case when DBMS_LOB.getlength(B.CONTENT) <=300 then dbms_lob.substr(B.CONTENT,300,1) else CONCAT(dbms_lob.substr(B.CONTENT,300,1),'...') end AS CONTENT,
dbms_lob.substr(B.REPLY) AS REPLY,
B.NAME,
A.GUESTBOOKCTG_ID AS CTGID,
C.CTG_NAME AS CTGNAME
FROM JC_GUESTBOOK A
LEFT JOIN JC_GUESTBOOK_EXT B ON A.GUESTBOOK_ID = B.GUESTBOOK_ID
LEFT JOIN JC_GUESTBOOK_CTG C ON A.GUESTBOOKCTG_ID = C.GUESTBOOKCTG_ID
UNION ALL
SELECT SERVICE_ID AS ID,
SITE_ID AS SITEID,
CREATE_TIME AS CREATETIME,
IS_CHECKED AS ISCHECKED,
IS_RECOMMEND,
SUBJECT AS TITLE,
case when DBMS_LOB.getlength(CONTENT) <=300 then dbms_lob.substr(CONTENT,300,1) else CONCAT(dbms_lob.substr(CONTENT,300,1),'...') end AS CONTENT,
dbms_lob.substr(REPLAY) AS REPLY,
NAME,
99,
'企業服務'
FROM JC_ENTERPRISESERVICE) T
WHERE 1=1
AND T.ISCHECKED=1
ORDER BY T.CREATETIME DESC