我正在使用C#,尝试按月对数据进行排序。我有一个日期列StartDate,查询如下:
SELECT
CompanyKey, CompanyName, CAST(Month(StartDate) as varchar(2)) + '/' +
CAST(YEAR(StartDate) as varchar(4)) as StartDate, SUM(Visits)
FROM ProfileStats
WHERE StartDate between '2012/12/28' and '2015/12/29'
GROUP BY CompanyKey, CompanyName, StartDate, Visits但是如果我使用month (StartDate)或CAST语法,它会抛出一个异常:
Additional information: Object of type 'System.String' cannot be converted
to type 'System.DateTime'.任何帮助/线索都将不胜感激。
发布于 2016-01-13 08:06:22
StartDate是一个DateTime列,您正尝试将其创建为字符串。您需要创建一个DateTime对象,可能如Create a date with T-SQL中所示,但如果不知道您使用的是哪种类型的SQL,则很难回答。
如果你正在尝试按月分组,我同意Kirk Broadhurst的答案,通过将group-by use设为月进行了修改:
SELECT CompanyKey, CompanyName, StartDate, SUM(Visits)
FROM ProfileStats
WHERE StartDate between '2012/12/28' and '2015/12/29'
GROUP BY CompanyKey, CompanyName, YEAR(StartDate), MONTH(StartDate), Visits但是,如果您尝试按月排序,则需要一个排序短语,不是吗?类似于:
SELECT CompanyKey, CompanyName, YEAR(StartDate) + '-' + MONTH(StartDate) AS StartDate_YearMonth, SUM(Visits)
FROM ProfileStats
WHERE StartDate between '2012/12/28' and '2015/12/29'
GROUP BY CompanyKey, CompanyName, YEAR(StartDate) + '-' + MONTH(StartDate), Visits
ORDER BY CompanyKey, CompanyName, YEAR(StartDate) + '-' + MONTH(StartDate), Visits除非您想要按其他属性分组并按月排序,而不使用这些组。你有点含糊其辞了
发布于 2016-01-13 08:15:15
您的C#代码试图将返回的字符串(VARCHAR)转换为DateTime对象。如果格式是正确的,它可以做到这一点,但这种格式是不正确的-它只是月份和年份。
只需选择StartDate即可。
SELECT CompanyKey, CompanyName, StartDate, SUM(Visits)
FROM ProfileStats
WHERE StartDate between '2012/12/28' and '2015/12/29'
GROUP BY CompanyKey, CompanyName, StartDate, Visits如果您想要选择一些从每月初开始的合成日期,以允许分组,我可以想到两个SQL选项:
01的日期,例如从CAST(YEAR(StartDate) as varchar(4)) + '-' + CAST(Month(StartDate) as varchar(2)) + '-01' + as StartDate
StartDate - (DAY(StartDate) - 1)
但是,如果您需要在应用程序中进行分组和过滤,我可能更喜欢返回整个日期并在应用程序中执行过滤。
发布于 2016-01-13 09:49:39
假设您正在尝试为您的startdate实现mm/yyyy格式,您可以使用如下内容
SELECT
CompanyKey, CompanyName, , SUM(Visits) ,right( CONVERT(VARCHAR(10),startdate,103),7) as startdate ,SUM(Visits)
FROM ProfileStats
WHERE StartDate between '2012/12/28' and '2015/12/29'
GROUP BY CompanyKey, CompanyName, StartDate, Visitshttps://stackoverflow.com/questions/34756076
复制相似问题