2010-04-13 64 views
1

我加載在一堆包含格式的日期數據如下圖所示:轉換數據

00-JAN-0000
00-FEB-0000
00-MAR-0000
00 -APR-0000
00-MAY-0000
00-JUN-0000
00-JUL-0000
00-AUG-0000
00-SEP-0000
00-OCT-0000
00-NOV-0000
OO-DEC-0000

SQL不能自動轉換這些日期,因爲它不承認日期的月份部分。我有大約50,000條記錄要導入。有任何想法嗎?

OP已經評論說:

我一起工作的數據是出生 客戶的日期。由於我做了 不想發佈某人的DOB在線, 我掩蓋了一天和一年的0s ,但我離開了這個月完好,因爲這是 什麼是造成這個問題。

+1

那些日期無效,因爲沒有日期'0'。你是如何期待一旦導入日期? – RedFilter 2010-04-13 14:16:17

+0

你可能應該提供一些更多的信息。什麼SQL服務器,什麼樣的操作系統。你有什麼可用的工具 - sed,awk,...? – txwikinger 2010-04-13 14:16:40

+0

我在想他只是以0作爲佔位符來顯示日期來演示格式,而不是實際的數據。 – JohnFx 2010-04-13 14:17:41

回答

0

你怎麼導入?

你確定其中的一個日期不是有點有點嗎? SQL服務器應接受您的(真實非零)日期dd-mmm-yyyy格式;

select convert(datetime, '12-NOV-1975') 
1975-11-12 00:00:00.000 
0

SQL可以識別的日期的月份部分,但它無法識別你的一天(零)或一年(也爲零)。如果你必須使用BULK INSERT,試試這個:

  • 將數據加載到一個臨時表中,設置爲char(11)
  • 複製列(INSERT ... SELECT ...)的數據到目標表

轉換代碼將是這樣的:(這將它設置爲當前年份的第一天)

INSERT MyTable (MyDate) 
select '01' + substring(@foo, 4, 3) + cast(year(getdate()) as char(4)) 
from MyInterimTable 

+0

我正在使用的數據是客戶的出生日期。由於我不想在網上發佈某人的DOB,所以我用0代替了這一天和那一年,但是我保留了這個月,因爲這是導致問題的原因。 – DoubleJ92 2010-04-13 14:29:45

0

創建一個臨時表,其中有一個由數據填充的YourDateString列,然後是一個實際的日期時間列YourDate,您將在不同的步驟中更新該列。像這樣:

DECLARE @YourTable table(YourDateString varchar(11), YourDate datetime) 

--simulate bulk load 
INSERT INTO @YourTable VALUES ('01-JAN-1976',null) 
INSERT INTO @YourTable VALUES ('02-FEB-1980',null) 
INSERT INTO @YourTable VALUES ('05-MAR-1991',null) 
INSERT INTO @YourTable VALUES ('12-APR-1997',null) 
INSERT INTO @YourTable VALUES ('22-MAY-1990',null) 
INSERT INTO @YourTable VALUES ('18-JUN-1971',null) 
INSERT INTO @YourTable VALUES ('17-JUL-1988',null) 
INSERT INTO @YourTable VALUES ('19-AUG-1993',null) 
INSERT INTO @YourTable VALUES ('19-SEP-1970',null) 
INSERT INTO @YourTable VALUES ('04-OCT-1982',null) 
INSERT INTO @YourTable VALUES ('08-NOV-1970',null) 
INSERT INTO @YourTable VALUES ('18-DEC-1983',null) 

--convert to proper datetime 
UPDATE @YourTable 
    SET YourDate= CONVERT(datetime,YourDateString) 

--show data 
select * from @YourTable 

OUTPUT:

YourDateString YourDate 
-------------- ----------------------- 
01-JAN-1976 1976-01-01 00:00:00.000 
02-FEB-1980 1980-02-02 00:00:00.000 
05-MAR-1991 1991-03-05 00:00:00.000 
12-APR-1997 1997-04-12 00:00:00.000 
22-MAY-1990 1990-05-22 00:00:00.000 
18-JUN-1971 1971-06-18 00:00:00.000 
17-JUL-1988 1988-07-17 00:00:00.000 
19-AUG-1993 1993-08-19 00:00:00.000 
19-SEP-1970 1970-09-19 00:00:00.000 
04-OCT-1982 1982-10-04 00:00:00.000 
08-NOV-1970 1970-11-08 00:00:00.000 
18-DEC-1983 1983-12-18 00:00:00.000 

(12 row(s) affected) 
0

我想我發現了這個問題。當我查看發送的數據時,我發現在某些記錄中,前一個字段爲空。當我分開日期時,我只能得到一年中的最後兩位數字。這是拋出我的錯誤。感謝大家的幫助。