1、創(chuàng)建測(cè)試表,create table test_date(v_date date);
10余年專(zhuān)注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專(zhuān)注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)成都辦公窗簾等多個(gè)領(lǐng)域,擁有豐富的網(wǎng)站運(yùn)維經(jīng)驗(yàn)。
2、插入測(cè)試數(shù)據(jù),
insert into test_date
select sysdate - level * 10 from dual connect by level 100
3、查詢(xún)表中所有記錄,select * from test_date,可以看到時(shí)間格式為年月日時(shí)分秒,
4、編寫(xiě)sql,將時(shí)間截取到年月,
select t.*,
?to_char(v_date, 'yyyymm') v_date_mon1,
?trunc(v_date, 'mm') v_date_mon2
from TEST_DATE t
oracle中,截取某個(gè)字符串前的字符需要用instr函數(shù)和substr函數(shù)共同完成。
工具:oracle 10g
步驟:
1、以截取字符串“210-1106000001”中“-”前的部分為例。
2、執(zhí)行語(yǔ)句為:
select?substr('210-1106000001',1,instr('210-1106000001','-')-1)?from?dual;
3、結(jié)果為:
instr函數(shù)語(yǔ)法:instr( string1, string2, start_position,nth_appearance )
參數(shù)含義:
substr函數(shù)語(yǔ)法:substr(strings|express,m,[n])
參數(shù)含義:
strings|express :被截取的字符串或字符串表達(dá)式。
m 從第m個(gè)字符開(kāi)始截取。
n 截取后字符串長(zhǎng)度為n。
1、將新建好的表aaaa,填充需要查詢(xún)的數(shù)據(jù)以"_"或者","為分隔符的兩條數(shù)據(jù)。
2、先挑ID為1的數(shù)據(jù)進(jìn)行截取查詢(xún)演示。
3、如果已知截取字符的長(zhǎng)度和特殊字符位置,就可以用substring()函數(shù)來(lái)從字符串的開(kāi)始位置,截取到特殊字符出現(xiàn)的位置。
4、使用charindex()函數(shù)來(lái)返回特殊字符出現(xiàn)的位置,查詢(xún)結(jié)果及語(yǔ)句。
5、使用LEFT()函數(shù)和charindex()函數(shù)來(lái)從字符最左邊開(kāi)始到特殊字符出現(xiàn)的位置。
6、第一個(gè)參數(shù)表示被截取的字符串,第二個(gè)參數(shù)表示要在第一個(gè)參數(shù)中開(kāi)始截取的位置,第三個(gè)參數(shù)表示要截取的長(zhǎng)度。
如果字段存的就是這個(gè),那么這個(gè)應(yīng)該是字符串吧,那么就分幾步操作。
(1)定位,定位{和:的位置,從現(xiàn)在來(lái)看有兩種可能,第一種
這是兩個(gè)字段,分別是{12345:67:8}和{ABC:0:9},那就簡(jiǎn)單了{(lán)肯定是1,所以這個(gè)也就不需要定位了,只需要定位第一個(gè)冒號(hào)的位置。
定位的函數(shù)應(yīng)該是instr
第二種:{12345:67:8}{ABC:0:9}是一個(gè)字段的內(nèi)容,那就麻煩一些,不過(guò)也能做,希望不是這樣的,因?yàn)檫@個(gè)就要麻煩很多了。正則倒是能做,不過(guò)正則都要測(cè)試,我可沒(méi)有相應(yīng)的環(huán)境做測(cè)試。這里也就不寫(xiě)了,如果是這種,那么自己翻一翻正則函數(shù)的用法,應(yīng)該能寫(xiě)出來(lái)。
(2)截取,如果是第一種,那么定位了第一個(gè)冒號(hào)位置以后,用這個(gè)位置-2,也就是
instr(字段,':',1)-2這就是截取的長(zhǎng)度,
從第二位開(kāi)始截取,截取這個(gè)長(zhǎng)度就可以substr(字段,2,instr(字段,':',1)-2)
這樣的話,{12345:67:8}換算到內(nèi)部就是substr({12345:67:8},2,5(7-2)),【7-2說(shuō)明5的來(lái)源,第一個(gè)冒號(hào)在第7位】,截取出來(lái)就是12345
還是那句話,如果是第二種可能,那么就要找每一個(gè){的位置,然后找在{后面距離最近的冒號(hào)的位置,然后再一個(gè)個(gè)的截取操作,正則應(yīng)該可以操作,不過(guò)我還是那句話,需要測(cè)試,意思和這個(gè)截取函數(shù)差不多,自己好好理解一下應(yīng)該就能操作了。
如果Oracle版本不是太低的話,使用 正則表達(dá)式函數(shù) REGEXP_SUBSTR 處理。\x0d\x0a\x0d\x0a5個(gè)參數(shù)\x0d\x0a第一個(gè)是輸入的字符串\x0d\x0a第二個(gè)是正則表達(dá)式\x0d\x0a第三個(gè)是標(biāo)識(shí)從第幾個(gè)字符開(kāi)始正則表達(dá)式匹配。(默認(rèn)為1)\x0d\x0a第四個(gè)是標(biāo)識(shí)第幾個(gè)匹配組。(默認(rèn)為1)\x0d\x0a第五個(gè)是是取值范圍:\x0d\x0ai:大小寫(xiě)不敏感;\x0d\x0ac:大小寫(xiě)敏感;\x0d\x0an:點(diǎn)號(hào) . 不匹配換行符號(hào);\x0d\x0am:多行模式;\x0d\x0ax:擴(kuò)展模式,忽略正則表達(dá)式中的空白字符。\x0d\x0a\x0d\x0aSQL SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+');
分享標(biāo)題:oracle如何截取,oracle如何截取字符串
標(biāo)題來(lái)源:http://vcdvsql.cn/article22/heoocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)