我正在使用一个包含日期值的字符串列(我没有设计它,但我必须使用它)。大约有2500条记录。
大多数日期值以MM / DD / YYYY格式输入(前面的'0'),但是有一些流氓记录是MM / DD / YY格式,或者其他一些没有前面的'0'
源数据示例:
05/01/2010
05/29/2011
05/20/2012
05/06/2015
我需要按顺序返回一个不同的值列表,所有值都以相同的方式(MM / DD / YYYY)格式化。
{{1}}
鉴于这些价值观输入方式缺乏一致性,我不确定如何实现目标?
答案 0 :(得分:2)
嗯,没有给出在这种特殊情况下使用DB的内容。让我们假设这是Oracle DB,所有日期都以Month开头,所需的结果是字符串,而5/1/10不是1910年5月1日。您可以这样做:
select to_char(to_date('5/1/10', 'MM/DD/YY'), 'MM/DD/YYYY') from dual;
select to_char(to_date('05/20/2012', 'MM/DD/YY'),'MM/DD/YYYY') from dual;
select to_char(to_date('5/29/2011', 'MM/DD/YY'), 'MM/DD/YYYY') from dual;
select to_char(to_date('5/6/2015', 'MM/DD/YY'),'MM/DD/YYYY') from dual;
你会得到
05/01/2010
05/20/2012
05/29/2011
05/06/2015
答案 1 :(得分:2)
如果列中的日期只有两种可能的格式:
x / xx / xx - > MM / DD / YY
xx / xx / xxxx - >毫米/日/年
然后使用简单的to_date( column_name, 'mm/dd/yy' )
将字符串转换为日期,然后使用to_char( value, 'mm/dd/yyyy' )
将日期转换回所需的格式。
简单:
to_char( to_date( column_name, 'mm/dd/yy' ), 'mm/dd/yyyy' )
您在to_date函数中只能使用一种转换格式mm/dd/yy
,因为Oracle使用的转换规则和此处描述的(在“String-to-Date Conversion Rules”主题下):
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924
简而言之 - 如果格式模型mm/dd/yy
与10/12/2014
之类的字符串不匹配,那么Oracle会自动尝试其他格式模型:mm/dd/yyyy