关于一个语句,新手第一次提问^O^ ,请大虾指导!

Eric_Moon 2015-02-28 04:05:51
请看下面语句,关于每小时销售额的查询!

select convert(VARCHAR(2),TransTime,114)+':00:00-' + cast(cast(convert(VARCHAR(2),TransTime,114) as int)+1 as varchar)+':00:00' as 每小时,SUM(PayAmt) as 金额
from dbo.TransSku
where DataSource ='1' and TransTime between '2015-02-18' and '2015-02-24'
GROUP BY convert(VARCHAR(2),TransTime,114) order by 每小时

实际效果如下图:


我就想问问,时间这一段感觉自己写的好傻,把varchar变成了int 就为了+1,然后又变回varchar,有没有更好的写法....

以上本人是新手哈,希望各位高手指导指导小弟!


...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eric_Moon 2015-02-28
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
呃,没注意,那可以用LTRIM(每小时+1)方式,快速转为数字再转为字符串
SELECT 每小时+':00:00-'+LTRIM(每小时+1)+':00:00' AS 每小时,金额
FROM(
	select convert(VARCHAR(2),TransTime,114) as 每小时,SUM(PayAmt) as 金额
	from dbo.TransSku
	where DataSource ='1' and TransTime between '2015-02-18' and '2015-02-24'
	GROUP BY convert(VARCHAR(2),TransTime,114)
)T
order by 每小时
谢谢 学习了 棒棒的T-SQL
还在加载中灬 2015-02-28
  • 打赏
  • 举报
回复
呃,没注意,那可以用LTRIM(每小时+1)方式,快速转为数字再转为字符串
SELECT 每小时+':00:00-'+LTRIM(每小时+1)+':00:00' AS 每小时,金额
FROM(
	select convert(VARCHAR(2),TransTime,114) as 每小时,SUM(PayAmt) as 金额
	from dbo.TransSku
	where DataSource ='1' and TransTime between '2015-02-18' and '2015-02-24'
	GROUP BY convert(VARCHAR(2),TransTime,114)
)T
order by 每小时
Eric_Moon 2015-02-28
  • 打赏
  • 举报
回复
貌似还有点实际问题,会提示出错什么的。
还在加载中灬 2015-02-28
  • 打赏
  • 举报
回复
可以用DATEADD(HOUR,1,TransTime)代替第二个时间

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧