将VARCHAR转换为DATE时出现SUBSTRING错误

时间:2016-02-18 14:46:22

标签: sql sql-server sql-server-2008

我使用以下代码将日期从varchar转换为可接受的日期格式。

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条记录吗?

1 个答案:

答案 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。