将文本数据类型字段转换为日期时间

问题描述:

我正在使用SQL Server 2000,并且我的ERP供应商使用文本数据类型字段来保存日期。将文本数据类型字段转换为日期时间

日期的样子:

6/21/2001

然而,他们中的一些空白。

我已经使用类似的尝试:

select coalesce(nullif(fdelivery, ''), '1/1/1900') FROM sorels 

去除空白无济于事。

我也试过:

case 
     when ltrim(rtrim(SOR.fdelivery)) = '' 

删除空白无济于事。

即使我可以将空白替换为看起来像日期的东西,我如何将字段转换或转换为日期时间(来自文本),以便我的报告程序知道它实际上是日期字段而不是文本。

啊,我发现了一个方法:

select 
Case 
when isdate(SUBSTRING(fdelivery, 1,11)) = 1 
then cast(SUBSTRING(fdelivery, 1,11) as datetime) 
else cast('1/1/1900' as datetime) 
end 
as DateConvert 
from sorels 

这将工作。它将文本字段的日期“部分”进行子串处理,我猜它会将其隐式转换为Char数据类型,然后我可以将其作为日期时间进行投射。

它已经,因为我用SQL Server 2000中的一段时间,但如果ISDATE功能是可用的,你可以使用这样的:

SELECT CAST((CASE WHEN ISDATE(CAST(fdelivery as varchar(20)) = 0 THEN '1-1-1900' ELSE CAST(fdelivery as varchar(20)) END) AS datetime) 
FROM sorels 
+0

我应该提到我尝试过。您不能在文本数据类型字段上使用isdate。不管怎么说,还是要谢谢你。 – DavidStein 2010-09-22 16:51:33

+0

我编辑了我的答案,包括转换为varchar。我相信这会起作用。 – 2010-09-22 16:58:49