我需要通過檔案名的子字串對結果集進行排序。子字串是日期。
例如:
select * from mytable where file_name like ' 2112%'
order by name_file desc;
結果集是例如這樣的:
- qwerty_20211220_120220
- asdfgh_20211229_121005
- zxcvbn_20211223_121151
如何按 name_file 中包含的字串日期的一部分進行排序?
謝謝大家
uj5u.com熱心網友回復:
您需要撰寫一個從字串中提取日期的運算式,然后在您的ORDER BY.
使用您的示例資料執行此操作的一種簡單方法可能是:
select * from files
order by substr(file_name,-15);
即,按檔案名的最后 15 個位置(即日期)排序。
如果您使用的是 12.2 或更高版本,則可以通過以下方式做得更好:
select * from files
order by to_date(substr(file_name,-15)
default null on conversion error,'YYYYMMDD"_"HH24MISS') nulls last;
這將確保您排序的資料是實際日期。最后一個沒有日期戳的檔案名將排在最后。
uj5u.com熱心網友回復:
或者,按“日期”排序(由第一組數字表示):
SQL> select *
2 from mytable
3 order by regexp_substr(file_name, '\d ');
FILE_NAME
----------------------
qwerty_20211220_120220
zxcvbn_20211223_121151
asdfgh_20211229_121005
或者,按第一個下劃線字符后面的任何內容排序:
SQL> select *
2 from mytable
3 order by substr(file_name, instr(file_name, '_'));
FILE_NAME
----------------------
qwerty_20211220_120220
zxcvbn_20211223_121151
asdfgh_20211229_121005
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399471.html
標籤:sql 甲骨文 sql-order-by
下一篇:基于中斷值的SQL計數行
