我一直無法找出如何正確轉換數據。在其目前的形式,它是VARCHAR和數據如下:SQL日期轉換爲8個字符值00作爲天
19260200, 19770900, 20030400, 20120300, 20020500,
所以你可以看到我有一年個月,但有日期沒有值。當我嘗試將其插入到格式爲datetime的SQL字段中時,我收到錯誤。任何人都知道我可以解決這個問題?我正在處理700,000條記錄的數據庫,因此我需要能夠編寫一些代碼來解決它,而不僅僅是手動完成並更改。
在此先感謝您的幫助!
我一直無法找出如何正確轉換數據。在其目前的形式,它是VARCHAR和數據如下:SQL日期轉換爲8個字符值00作爲天
19260200, 19770900, 20030400, 20120300, 20020500,
所以你可以看到我有一年個月,但有日期沒有值。當我嘗試將其插入到格式爲datetime的SQL字段中時,我收到錯誤。任何人都知道我可以解決這個問題?我正在處理700,000條記錄的數據庫,因此我需要能夠編寫一些代碼來解決它,而不僅僅是手動完成並更改。
在此先感謝您的幫助!
INSERT dbo.destination(date_column)
SELECT dt FROM
(
SELECT dt = CASE
WHEN src_date_column LIKE '%00' THEN
STUFF(src_date_column, 8, 1, '1')
ELSE src_date_column
END
FROM dbo.source
) AS x
WHERE ISDATE(dt) = 1;
爲了解決意見:
AS x
只是一個別名。派生表需要被調用。如果你只是說:
SELECT x FROM (SELECT x = 1);
你得到這個無用的錯誤:
Msg 102, Level 15, State 1
Incorrect syntax near ';'.
但如果你說:
SELECT x FROM (SELECT x = 1) AS y;
至於你的其他問題,您可以簡單地添加其他列到內部SELECT
,例如:
INSERT dbo.Citation(PatentNo, Citation, CitedBy, CitationDate)
SELECT PatentNo, Citation, WhoCitedThis, dt
FROM
(
SELECT PatentNo, CitationSource, WhoCitedThis, dt = CASE
WHEN CitationDate LIKE '%00' THEN STUFF(CitationDate, 8, 1, '1')
ELSE CitationDate
END
FROM dbo.CitationSource
) AS x
WHERE ISDATE(dt) = 1;
現在,你需要決定你想要對無效日期做什麼,比如20120231或20120399.那些只是落伍了。我的第一個建議是,製作一個適當的日期或日期時間欄,並拒絕首先進入系統的錯誤日期。
工作很好! 「AS x」是指什麼?我對SQL仍然相當陌生,想盡可能多地學習 – 2012-07-17 05:15:29
另一個問題是我如何在現有插入代碼中插入代碼: 'insert into Citation(PatentNo,Citation,CitedBy) 選擇專利號,引文,whocitedthis 從citationsource ' 的上面的修改後的版本在測試DB工作是: ' INSERT引文(citationdate) SELECT DT FROM ( SELECT DT = CASE WHEN citationDate LIKE「% 00'THEN STUFF(CitationDate,8,1,'1') ELSE CitationDate END FROM CitationSource )AS x WHERE ISDATE(dt)= 1;' – 2012-07-17 05:30:06
這對我來說更有意義,謝謝@Aaron Bertrand。問題不是無效的日期只是填充平面文件然後帶入SQL的XML文件的日期添加日期00,因爲它是空白的。我認爲在SQL中糾正這個問題會更容易,然後是別人之前寫過的python程序。 – 2012-07-17 18:45:28
你可以嘗試這樣的事情:
cast(left(val, 6)+'01') as date)
也就是說,插入一個有效日期值轉換成字符串並做轉換。
那麼你想插入什麼,每個月的第一天時間是'00'? – 2012-07-17 02:01:19