SQL - 将字符串转换为日期和/或时间

时间:2018-04-05 12:45:57

标签: sql sql-server datetime casting

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

我的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

如何才能正确播放日期?

2 个答案:

答案 0 :(得分:6)

CASE WHEN部分,您要返回string 'Total',但在ELSE部分中,您将返回date type value,那么一列如何才能拥有两种类型的数据,因此您需要到cast your date to string type,如下所示:

CAST(End_Date AS VARCHAR)

OR

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;

答案 1 :(得分:1)

更改此行:

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