【问题标题】:Need to combine 2 statements into 1需要将 2 个语句合并为 1 个
【发布时间】:2014-04-03 03:07:34
【问题描述】:

好吧,长话短说……

有 2008 r2 SQL 查询,在 excel 中运行并驱动数据透视表/图表。一些设计这个数据库的天才(我的意思是他们可能比我聪明 1000 倍)在属性中有一个重要的日期列列为“日期”。那你说什么???

Excel 不允许数据透视图/表格按月分组(这就是它的简称)。 excel中没有任何东西可以工作,如果我格式化单元格等......它会在刷新该数据时全部恢复,等等......等等......没有什么可以解决这个问题并且不能使用宏,因为我的组织不允许它。

所以我的修复...

将 'date' 转换为 varchar,然后从 varchar 转换为 datetime... 效果很好,看起来像这样:

(CONVERT(varchar(10), [TestDate], 20)) as 'Date1',
(CONVERT(datetime, [TestDate], 20)) as 'Date2',

现在我的问题...

谁能帮我把这两个语句组合成一个只产生一个名为“日期”的列???

已经很晚了,我的大脑在 2 杯咖啡前给了我...非常感谢这位新手..

编辑:显然,我最终得到了带有“date1”和“date2”标签的 2 列。

【问题讨论】:

    标签: sql sql-server excel pivot-table


    【解决方案1】:

    您需要嵌套它们。您将Date1 的内容放入Date2 中以代替列名。这将是它在 SQL Server 中的工作方式

    (CONVERT(datetime, (CONVERT(varchar(10), [TestDate], 20)), 20)) as 'Date2'

    【讨论】:

    • 这很完美,解释了很多...非常感谢您花时间提供帮助。我还不能投票,或者我会投票。
    【解决方案2】:

    如果您想删除 time 部分,您可以通过以下解决方案避免这些转换:

    DECLARE @TestDate DATETIME;
    SET     @TestDate = GETDATE();
    SELECT  DATEADD(DAY, DATEDIFF(DAY, 0, @TestDate), 0) AS Sol1
    SELECT  DATEADD(DAY, DATEDIFF(DAY, {d '1900-01-01'}, @TestDate), {d '1900-01-01'}) AS Sol2
    

    注意:日期时间 0 = 1900-01-01

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2010-10-07
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多