我进行了搜索和搜索 - 找到了主题的变体,但对我的问题没有真正的答案。
我需要将MAX
的{{1}}转换为datetime
,并将其插入我创建的新表中。
这是我的代码:
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
我收到的错误消息:消息257,级别16,状态3,行56
不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询。
我已经尝试了我能想到的一切。我的代码中生成的[emailaddressid] int not null PRIMARY KEY
, [FirstOptOutDate] datetime null
, [LastOptOutDate] datetime null
, [bu_id] int null
, [brand_id] int null
语句来自我认为可以解决此问题的字符串。什么都行不通。请帮帮忙?
答案 0 :(得分:3)
您收到错误是因为您的列顺序错误; 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可能是?)。
答案 1 :(得分:0)
第四列bu_id的类型为int
转换正在转换为datetime,因此您收到错误
, CONVERT(datetime, max([emailaddresses_summary])
您可以将其转换为int,这将返回自1900年1月1日以来的天数 或者您需要将列定义为日期时间
与brand_id专栏相同的问题
, CONVERT(int, max([emailaddresses_summary])