格式化日期,其中零件的位置是可变的

时间:2015-08-11 10:24:49

标签: sql datetime

我们有一个需要导入的文件,其中包含日期。这些日期的格式是我以前没见过的,日期部分的长度可能不同(但不是看似月份或年份)和基于数字是否为两位数的位置,即

日期:

13082014 is 13th February 2014

9092013 is 9th September 2013

当前脚本尝试将部分子串出来,但由于没有足够的数据而在第二个部分失败。我可以写一个if或case来检查长度,但是有一种SQL格式可以用来可靠地导入这些数据吗?

澄清这是MSSQL,日期格式为ddmmyyyy或dmmyyyy

3 个答案:

答案 0 :(得分:2)

其中一个简单的方法是使用STUFF。

示例:

select STUFF(STUFF('13082014 ',3,0,'/'),6,0,'/'); 
//result: 13/08/2014
祝你好运。

答案 1 :(得分:1)

LPAD在缺少时为零,因此总是得到一个八字符的日期字符串。以下是Oracle的一个示例,其他DBMS可能还有其他字符串和日期函数来实现相同的功能。

select to_date(datestring, 'ddmmyyyy')
from
(
  select lpad('13082014', 8, '0') as datestring from dual
  union all
  select lpad('9092013', 8, '0') as datestring from dual
);

结果:

13.08.2014
09.09.2013

答案 2 :(得分:0)

您可以将日期转换为相关日期格式,然后导入数据(基于dateformat更改逻辑) 这样的事情:

select Convert(varchar(10),CONVERT(date,YourDateColumn,106),103)