2010-09-22 180 views
0

我正在使用SQL Server 2000,並且我的ERP供應商使用文本數據類型字段來保存日期。將文本數據類型字段轉換爲日期時間

日期的樣子:

6/21/2001

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

我已經使用類似的嘗試:

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

去除空白無濟於事。

我也試過:

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

刪除空白無濟於事。

即使我可以將空白替換爲看起來像日期的東西,我如何將字段轉換或轉換爲日期時間(來自文本),以便我的報告程序知道它實際上是日期字段而不是文本。

回答

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數據類型,然後我可以將其作爲日期時間進行投射。

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 
+0

我應該提到我嘗試過。您不能在文本數據類型字段上使用isdate。不管怎麼說,還是要謝謝你。 – DavidStein 2010-09-22 16:51:33

+0

我編輯了我的答案,包括轉換爲varchar。我相信這會起作用。 – 2010-09-22 16:58:49

相關問題