【问题标题】:Convert DATETIME to 8 digit INT in format YYYYMMDD SQL以 YYYYMMDD SQL 格式将 DATETIME 转换为 8 位 INT
【发布时间】:2017-07-25 19:28:24
【问题描述】:

需要连接两个表。一个表有一个“datekey”列,它是来自 dimdate 表的 YYYYMMDD 格式的 int,另一个表有一个“CreatedOn”列,它是一个日期时间。我最初将日期时间转换为日期,因为这是 group by 似乎正常工作的唯一方式。由于“on d.datekey = BBB.datekey”行,我不断收到错误“操作数类型冲突:日期与 int 不兼容”。有什么简单的解决方法的建议吗?

select 
    distinct CONVERT (date,convert(char(8),d.datekey )) as Date
    , isnull(BBB.reccount,0) DimAccount
from dimdate d
left outer join(
    Select 
        cast(createdon as date) datekey
        , count(*) RecCount
    from DimAccount 
    group by cast(createdon as date)
)BBB on d.datekey = BBB.datekey
where d.datekey like '2017%'
group by d.datekey
,BBB.RecCount
having MAX(DATEDIFF(dd, CONVERT(date, CAST(d.Datekey  AS CHAR(8)), 101), GETDATE())) > -1
order by date desc

【问题讨论】:

  • 你试过转换成 varchar 再转换成 int 吗?
  • dev.mysql.com/doc/refman/5.7/en/… google 是你的朋友(还有 docs)
  • @AlekhyaVemavarapu 仍然为查询中的所有日期返回 0,我不知道为什么
  • @DanBracuk sql server,如果这就是你的意思,在 Visual Studio 中
  • dimDate 表中的其他字段是什么?

标签: sql sql-server datetime int


【解决方案1】:

这样的事情应该让你开始

from dimDate dd join dimAccount da 
on cast(da.createdOn as date) = cast(cast(dd.dateKey as char(8)) as date)

where dd.year = 2017  -- or you can filter on da.createdOn >= '20170101'

事实上,如果您的 dimDate 表有一个实际的日期列,您根本不必转换 dateKey。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多