Oracle的字符串轉數組以及數組轉字符串


字符串轉數組:  
  
(SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR    
FROM DUAL    
CONNECT BY LEVEL <=    
 LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1)  
 針對上面語法進行解析(轉載自https://blog.csdn.net/u012643122/article/details/78932709):

regexp_substr詳解:

regexp_substr函數格式如下:
function regexp_substr(String, pattern, position, occurrence, modifier)
__srcstr :要操作的字符串
__pattern :正則匹配規則字符串
__position :起始位置,1表示從第一個字符開始匹配
__occurrence :標識第幾個匹配組,默認為1
__modifier :模式('i’不區分大小寫進行檢索;‘c’區分大小寫進行檢索。默認為’c’。)

level解釋:
參數level是oracle的關鍵字,是一個偽列,偽劣的數據是oracle自動生成的,一般就是1、2、3等等這樣。
一般配合connect by一起使用。

connect by解釋:
connect by相當於查詢條件,在查詢字段中使用了level偽列時,必須使用connect by作為替代where來篩選偽列的值。

  
數組轉字符串  
 select wmsys.wm_concat(cityname) from sys_city  
 where provinceid='29'

 工作中的例子:sql如下

<!--查詢年級專業所做的方案的基本信息:
	查專業方向碼,專業方向名稱,年級,學位授予,最短修業年限,最長修業年限,學制,國標專業名稱以及碼,方案簡介
	-->
	<select id="querySchemeBasicInfo" parameterType="java.lang.String" resultType="com.ly.education.cultivation.plan.api.vo.SchemeBasicInfoVo">
		select
			zyfx.zyfxmc as majorName,
			zyfx.zyfxdm as majorCode,
			nj.nj as gradeMajorYear,
			nj.ZDXYNX as gradeMajorShortStudyLength,
			nj.ZCXYNX as gradeMajorLongStudyLength,
			nj.XZ as gradeMajorStudyLength,
			gbzy.gbzymc as standardMajorName,
			gbzy.gbzydm as standardMajorCode,
			zyfa.FAJJ as schemeIntroduce,
			(
			<!-- 根據年級專業方向ID查詢對應的年級與學生類別碼從培養方案的版本信息表查詢版本名稱 -->
				 select
         			 FABBMC
        		from T_PYFA_BBXX
        		where SYNF = (
	                			select  
	                				NJ
	                			from T_GGZY_NJZYFX@hxsj
	                			where njzyfx_id = #{gradeMajorId,jdbcType=VARCHAR}
               				)
              	and XSLBM = ( 
	              				select 
	              					XSLBM
	                			from T_GGZY_NJZYFX@hxsj
	                			where njzyfx_id = #{gradeMajorId,jdbcType=VARCHAR}
                			)
			)as schemeVersionName,
			<!-- 因為學位授予門類嗎這個字段可能是一個以逗號連接的字符串,即一個年級專業方向可以對應多個學位授予門類,需要t.DMH in一個數組 -->
			(
				select
					wm_concat(t.DMMC)
				from T_DMK_DMZ@Hxsj t
				where t.DMBH='XWSYMLM'
				and t.DMH in 
					(
						SELECT 
							REGEXP_SUBSTR(nj.XWSYMLM, '[^,]+', 1, LEVEL, 'i') AS STR    
						FROM DUAL    
						CONNECT BY LEVEL &lt;=    
 						LENGTH(nj.XWSYMLM) - LENGTH(REGEXP_REPLACE(nj.XWSYMLM, ',', '')) + 1)
			) as gradeMajorDegreeCategoryName
		from T_GGZY_NJZYFX@hxsj nj
		left join T_GGZY_ZYFX@hxsj zyfx
			on zyfx.ZYFX_ID = nj.ZYFX_ID
		left join T_GGZY_GBZY@hxsj gbzy
			on gbzy.GBZY_ID = zyfx.GBZY_ID
		left join T_PYFA_ZYFAJBXX zyfa
			on zyfa.njzyfx_id = nj.njzyfx_id
		where nj.njzyfx_id = #{gradeMajorId,jdbcType=VARCHAR}
	</select>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM