2016-02-18 86 views
0

我正在使用以下代码将日期从varchar转换为可接受的日期格式。将VARCHAR转换为DATE时出现SUBSTRING错误

create view v1 as 
Select name,time, 
CAST(CAST(SUBSTRING([ENTDATE],1,2)+ 
SUBSTRING([ENTDATE],3,2)+ --month 
SUBSTRING([ENTDATE],5,2) --day 
AS VARCHAR(10)) 
AS DATE) as ENTDATE) 
from table1 

目前的日期显示为990415.

有100000条记录。约10条日期记录不干净,长度小于6.例如:7912.

这些记录导致转换失败错误。有什么办法可以在转换时处理这10条记录吗?

+3

在你的选择列表中使用一个case表达式,分别对待太短的值! – jarlh

+0

您可以使用CASE语句屏蔽它们:'CASE WHEN LEN([ENTDATE])<6 THEN'1/1/2000'ELSE CAST(...)END'。有很多方法可以解决这个问题,因此知道这是一次性转换还是应该在正在进行的过程中使用它会有所帮助。 – rsbarro

+0

这是一次性转换! –

回答

0

如果您确定记录有8个或6个位置,则可以在查询中使用nullif

create view v1 as 
Select name,time, 
CAST(CAST(SUBSTRING([ENTDATE],1,2)+ 
SUBSTRING([ENTDATE],3,2)+ --month 
nullif(SUBSTRING([ENTDATE],5,2), '') --day 
AS VARCHAR(10)) 
AS DATE) as ENTDATE) 
from table1 

当记录有6个位置时,这将返回NULL。

相关问题