首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTime错误的字符串

DateTime错误的字符串
EN

Stack Overflow用户
提问于 2016-01-13 08:00:02
回答 3查看 135关注 0票数 0

我正在使用C#,尝试按月对数据进行排序。我有一个日期列StartDate,查询如下:

代码语言:javascript
复制
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语法,它会抛出一个异常:

代码语言:javascript
复制
Additional information: Object of type 'System.String' cannot be converted 
to type 'System.DateTime'.

任何帮助/线索都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2016-01-13 08:06:22

StartDate是一个DateTime列,您正尝试将其创建为字符串。您需要创建一个DateTime对象,可能如Create a date with T-SQL中所示,但如果不知道您使用的是哪种类型的SQL,则很难回答。

如果你正在尝试按月分组,我同意Kirk Broadhurst的答案,通过将group-by use设为月进行了修改:

代码语言:javascript
复制
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

但是,如果您尝试按月排序,则需要一个排序短语,不是吗?类似于:

代码语言:javascript
复制
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

除非您想要按其他属性分组并按月排序,而不使用这些组。你有点含糊其辞了

票数 1
EN

Stack Overflow用户

发布于 2016-01-13 08:15:15

您的C#代码试图将返回的字符串(VARCHAR)转换为DateTime对象。如果格式是正确的,它可以做到这一点,但这种格式是不正确的-它只是月份和年份。

只需选择StartDate即可。

代码语言:javascript
复制
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

  • Subtract中的日期开始计算当前‘天’;例如,对于1/13减去(13-1)得到1/1;对于1/15减去(15-14)得到1/1。

StartDate - (DAY(StartDate) - 1)

但是,如果您需要在应用程序中进行分组和过滤,我可能更喜欢返回整个日期并在应用程序中执行过滤。

票数 0
EN

Stack Overflow用户

发布于 2016-01-13 09:49:39

假设您正在尝试为您的startdate实现mm/yyyy格式,您可以使用如下内容

代码语言:javascript
复制
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, Visits
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34756076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档