Oracle/MySQL 從dual/help_topic中獲取多行數據

背景與意義:某學長寫出了一段又臭又長的代碼,引發了我的思考

獲取12個月的月份:

month
1
2
3
4
5
6
7
8
9
10
11
12

正常操作:

SELECT MONTH 
FROM
  (
  SELECT
    1 MONTH UNION ALL
  SELECT
    2 MONTH UNION ALL
  SELECT
    3 MONTH UNION ALL
  SELECT
    4 MONTH UNION ALL
  SELECT
    5 MONTH UNION ALL
  SELECT
    6 MONTH UNION ALL
  SELECT
    7 MONTH UNION ALL
  SELECT
    8 MONTH UNION ALL
  SELECT
    9 MONTH UNION ALL
  SELECT
    10 MONTH UNION ALL
  SELECT
    11 MONTH UNION ALL
  SELECT
  12 MONTH 
  ) months;

因爲實在是太長了,希望能簡短一點,因此調用MySQL的help_topic進行改寫:

MySQL版本

SELECT
	substring_index( substring_index( m_str, m_split, help_topic_id + 1 ), m_split,- 1 ) AS MONTH 
FROM
	mysql.help_topic,
	( SELECT '1,2,3,4,5,6,7,8,9,10,11,12' AS m_str, ',' AS m_split FROM DUAL ) AS m_tbl 
WHERE
	help_topic_id < ( length( m_tbl.m_str ) - length( REPLACE ( m_tbl.m_str, m_split, '' )) + 1 );

使用了拆分字符串的思想,其中m_str就是每行需要顯示的數值,m_split 是分隔符。

輸出結果

在這裏插入圖片描述

Oracle版:

SELECT
	ROWNUM MONTH 
FROM
	DUAL CONNECT BY LEVEL <= 12;

Oracle輸出結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章