我使用的是Oracle 10。
我想以格式从数据库中选择日期:
02<sup>nd</sup> November 2013
查询以获得以上结果:
select
replace(
replace(
replace(
replace(
to_char(to_date('02-Nov-2013','dd-Mon-yyyy'),'ddth Month yyyy')
,'nd','<sup>nd</sup>')
,'st','<sup>st</sup>')
,'th','<sup>th</sup>')
,'Augu<sup>st</sup>','August')
from dual
以上查询执行正常。但它在year
之前添加了更多空格来输出,我得到的输出如下:(而不是一个空格,输出在年前包含两个空格)
02<sup>nd</sup> November__2013 //underscore denotes space
如果日期包含August
个月,那么输出包含四个空格而不是一个空格。
02<sup>nd</sup> August____2013 //underscore denotes space
任何建议都将受到赞赏。
我找到了一个解决方案,但我仍然不确定为什么上面的查询会在输出中添加额外的空格。
select
regexp_replace(
replace(
replace(
replace(
replace(
to_char(to_date('02-Aug-2013','dd-Mon-yyyy'),'ddth Month yyyy')
,'nd','<sup>nd</sup>')
,'st','<sup>st</sup>')
,'th','<sup>th</sup>')
,'Augu<sup>st</sup>','August')
,'[[:space:]][[:space:]]*',' ')
from dual
答案 0 :(得分:3)
最长的月份长度为9.因此,所有月份都在右侧填充空格以组成9个字符。
您可以指定fm
格式模型来修剪空间。
to_char(to_date('04-May-2013','dd-Mon-yyyy'),'ddth fmMonth yyyy')