我正在使用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 。
答案 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