Jos*_*shL 6 sql oracle string-formatting
我想将数字格式化为"1st","2nd","4th","9th"等.是否有Oracle函数可以为我执行此操作?
假设提供的值是数字而不是DATE,您可以使用TO_CHAR但是必须将数值转换为字符串,然后在最终格式化之前将DATE(Julian)转换为:
SELECT TO_CHAR(TO_DATE('1', 'dd'), 'ddth')
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
结果:
01st
Run Code Online (Sandbox Code Playgroud)
在测试时,使用'd'作为格式并未返回预期结果,因为该值被解释为Julian日期.要么输出子字符串以删除前导零,要么提供完整的日期字符串(与TO_CHAR无关,因为它只对月中的某一天感兴趣):
SELECT TO_CHAR(TO_DATE('1900-01-01', 'YYYY-MM-dd'), 'dth')
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
由于日历日结束于31,因此请使用年份值来处理大于31的数字:
SELECT TO_CHAR(TO_DATE('32-01-01', 'YYYY-MM-dd'), 'yyth')
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
结果:
32nd
Run Code Online (Sandbox Code Playgroud)
也许我过于简单化了,但似乎以下内容应该可以正常工作(对于整数),并且比转换为日期和返回值更具可读性:
select case
when initial_extent is null then null
when substr(initial_extent,-2,1) = '1'
then initial_extent || 'th'
else case substr(initial_extent,-1,1)
when '1' then initial_extent || 'st'
when '2' then initial_extent || 'nd'
when '3' then initial_extent || 'rd'
else initial_extent || 'th'
end
end as formatted_number
from user_tables
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4983 次 |
| 最近记录: |