将文本数据类型字段转换为DateTime

时间:2010-09-22 16:28:06

标签: tsql sql-server-2000

我正在使用SQL Server 2000,而我的ERP供应商使用Text数据类型字段来保存日期。

日期看起来像:

6/21/2001

然而,其中一些是空白的。

我尝试过使用类似的东西:

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

删除空白无济于事。

我也试过了:

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

删除空白无济于事。

即使我可以用看起来像日期的东西替换空白,我怎样才能将字段转换或转换为datetime(来自Text),以便我的报告程序知道它实际上是Date字段而不是Text 。

2 个答案:

答案 0 :(得分:1)

啊,我找到了一个方法:

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数据类型,然后我可以将其转换为日期时间。

答案 1 :(得分:0)

我使用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