【问题标题】:SQL - Converting a string to a date and / or timeSQL - 将字符串转换为日期和/或时间
【发布时间】:2018-04-05 12:45:57
【问题描述】:

我有一张有几行的表。我想要的是我想显示将自动生成的最后一行中特定字段的总和。

我的 SQL 代码:

SELECT  
    Account,
    Amount = SUM(Amount),
    EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE EndDate END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;

错误信息: Error converting a string to a date and / or time.

如果我更改 else 部分,我会得到想要的结果,只有我的日期不会显示。

修改后的代码:

SELECT  
    Account,
    Amount = SUM(Amount),
    EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE 'FakeDate' END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;

输出:

Account Amount  EndDate
70000   776,98  FakeDate
70000   776,98  Total
70108   131,8   FakeDate
70108   60,3    FakeDate
70108   101,1   FakeDate
70108   40,8    FakeDate
70108   694,05  FakeDate
70108   1028,05 Total

我怎样才能正确播放日期?

【问题讨论】:

  • 您使用的是哪个 dbms?该查询是特定于产品的。
  • 你有 2 列 enddateend_date ?
  • Microsoft SQL Server 2008 R2。我有一栏end_date。第二列有错误。

标签: sql sql-server datetime casting


【解决方案1】:

CASE WHEN 部分中,您返回string 'Total',但在ELSE 部分中,您返回date type value,那么一列怎么可能有两种类型的数据,所以您需要cast your date to string type 如下:

CAST(End_Date AS VARCHAR)

CONVERT(VARCHAR, End_Date , 120)

更正的查询:

SELECT  
    Account,
    Amount = SUM(Amount),
    EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' 
              ELSE CAST(End_Date AS VARCHAR) END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;

【讨论】:

    【解决方案2】:

    改变这一行:

    EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE EndDate END
    

    收件人:

    EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE convert(varchar(25), EndDate, 120) END
    

    【讨论】:

      猜你喜欢
      • 2017-05-05
      • 2019-04-12
      • 2021-01-05
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2021-06-26
      相关资源
      最近更新 更多