2014-10-09 56 views
0

我搜索並搜索了 - 找到了主題變體,但沒有真正的答案給我的問題。將DateTIme轉換爲日期/「int is not allowed」錯誤

我需要將datetimeMAX轉換爲date,並將其插入到我創建的新表中。

這裏是我的代碼:

INSERT INTO [dbo].[OptOutEmails]([emailaddressid],[FirstOptOutDate], [LastOptOutDate], [bu_id], [brand_id]) 
SELECT [dbo].[DistinctEmailIds].[emailaddressid] as email 
,[dbo].[emailaddresses_summary].[bu_id] 
,[dbo].[emailaddresses_summary].[brand_id] 
, CONVERT(datetime, max([emailaddresses_summary].[FirstOptOutDate])) AS FirstOptOutDate 
, CONVERT(datetime, max([emailaddresses_summary].[LastOptOutDate])) AS LastOptOutDate 
FROM [dbo].[DistinctEmailIds] 
JOIN [dbo].[emailaddresses_summary] 
ON [dbo].[DistinctEmailIds].[emailaddressid] = [dbo].[emailaddresses_summary].[emailaddressid] 
WHERE [dbo].[emailaddresses_summary].[LastOptOutDate] IS NOT NULL 
GROUP BY [dbo].[DistinctEmailIds].[emailaddressid],[dbo].[emailaddresses_summary].[bu_id],[dbo].[emailaddresses_summary].[brand_id]; 
GO 

它需要進入這個表:

[emailaddressid] int not null PRIMARY KEY 
, [FirstOptOutDate] datetime null 
, [LastOptOutDate] datetime null 
, [bu_id] int null 
, [brand_id] int null 

錯誤消息我得到:消息257,級別16,狀態3,第56行

不允許從數據類型datetime到int的隱式轉換。使用CONVERT函數來運行此查詢。

我試過了我能想到的一切。在我的代碼中產生的CONVERT聲明來自我認爲可以解決此問題的字符串。沒有任何工作。請幫忙?

回答

0

您收到錯誤信息,因爲您的列順序錯誤;在INSERT語句中的列不在select語句匹配順序:

INSERT INTO [dbo].[OptOutEmails]([emailaddressid],[FirstOptOutDate], [LastOptOutDate], [bu_id], [brand_id]) 
SELECT [dbo].[DistinctEmailIds].[emailaddressid] as email 
,[dbo].[emailaddresses_summary].[bu_id] 
,[dbo].[emailaddresses_summary].[brand_id] 
, CONVERT(datetime, max([emailaddresses_summary].[FirstOptOutDate])) AS FirstOptOutDate 
, CONVERT(datetime, max([emailaddresses_summary].[LastOptOutDate])) AS LastOptOutDate 

你想這樣的:

INSERT INTO [dbo].[OptOutEmails]([emailaddressid],[FirstOptOutDate], [LastOptOutDate], [bu_id], [brand_id]) 
SELECT [dbo].[DistinctEmailIds].[emailaddressid] as email 
, CONVERT(datetime, max([emailaddresses_summary].[FirstOptOutDate])) AS FirstOptOutDate 
, CONVERT(datetime, max([emailaddresses_summary].[LastOptOutDate])) AS LastOptOutDate 
, [dbo].[emailaddresses_summary].[bu_id] 
, [dbo].[emailaddresses_summary].[brand_id] 

此外,您可能要更改彙總列

, MAX(CONVERT(datetime, [emailaddresses_summary].[FirstOptOutDate])) AS FirstOptOutDate 
, MAX(CONVERT(datetime, [emailaddresses_summary].[LastOptOutDate])) AS LastOptOutDate 

因爲這樣可以更好地傳達意圖,並將MAX聚合函數應用於轉換後的datetime列,而不是之前的任何操作(varchar可能?)。

+0

嗨,大家好 - 非常感謝你!大聲笑 - 我後來添加了列,什麼是noob(noobs任何人???)錯誤!除此之外,我還是遇到了Clustered Index錯誤(我的數據庫在Azure中 - 這是另一個重要的信息)。但是我不想讓emailaddressid成爲PK,所以我使用表中的AUTO_INCREMENT代碼創建了ID ...'CREATE TABLE OptOutEmails ( ID INT IDENTITY(1,1)PRIMARY KEY ,[emailaddressid]詮釋不爲空 ,[FirstOptOutDate]日期時間空 ,[LastOptOutDate]日期時間空 ,[bu_id] INT空 ,[brand_id] int null ); GO'然後,它就像一個魅力!謝謝! – FirstLoser 2014-10-09 12:22:46

0

第四列bu_id是int類型

轉換做轉換爲datetime的,所以你得到的錯誤

, CONVERT(datetime, max([emailaddresses_summary]) 

你可以把它轉換成整型,因爲這將返回天數1900年1月1日 或者你需要定義列的日期時間

與brand_id柱相同的問題

, CONVERT(int, max([emailaddresses_summary])