在Oracle Sql查询中获取格式化字符串
我的问题是这样的在Oracle Sql查询中获取格式化字符串,sql,database,oracle,string-formatting,Sql,Database,Oracle,String Formatting,我的问题是这样的 Select date_value from Tab1; 2008-09 2009-10 2007-09 输出如下所示(date_值为Varchar2列) 我正在尝试对列date_值进行一些格式化,以便输出如下所示 Select date_value from Tab1; 2008-09 2009-10 2007-09 作为上述查询的一部分,是否有一种方法可以使用一些内置的拆分/联接oracle函数来执行此操作。我在探索Instr和Substr,但我不确定如
Select date_value from Tab1;
2008-09
2009-10
2007-09
输出如下所示(date_值为Varchar2列)
我正在尝试对列date_值进行一些格式化,以便输出如下所示
Select date_value from Tab1;
2008-09
2009-10
2007-09
作为上述查询的一部分,是否有一种方法可以使用一些内置的拆分/联接oracle函数来执行此操作。我在探索Instr和Substr,但我不确定如何在该查询中执行这个jsut
SELECT SUBSTR(date_value,1,5) || SUBSTR(date_value,8,2) FROM tab1
这将在未来8000年内起作用 如果在10g数据库上执行此操作,则可以使用 当然,在这里适用,尽管它确实有一个明显的优势:Y10K合规性:)
@cularis有答案,但请记住,这不是存储数据的正常方式。如果你有两列——例如:开始年和结束年,那么你就可以执行日期函数等。当然,你仍然可以随时输出“yyy-YY”格式。是的,我明白你的意思。因为我在一些现有的数据库上运行查询,所以我真的没有太多的更改选项。
SQL> select dcol
2 , regexp_replace(dcol
3 , '([[:digit:]]+)\-([[:digit:]]+)([[:digit:]]{2})'
4 , '\1-\3') as regexp_replace
5 from t79
6 /
DCOL REGEXP_REPLACE
------------------------------ ------------------------------
2008-2009 2008-09
2009-2010 2009-10
2007-2009 2007-09
10199-10200 10199-00
887-888 887-88
SQL>