按连锁SQL列中的日期字符串排序

时间:2017-02-08 19:17:43

标签: sql sql-server

所以我有一个非常棘手的问题,我无法弄明白。 我有一个查询显示以下2列。

---------------------------                                      
3970131000-**2016-04-30** | CB90 

3970429000-**2016-06-30** | CB90

3970429000-**2016-03-31** | CB90

--------------------------------

我几乎添加了两列[Customer#]和DATE。(= Lens) 我的问题是,如何对结果进行排序,以便查看列中的字符串DATE并按DESC顺序对其进行排序。

这将是我想要的输出:

---------------------------    
3970429000-**2016-06-30** | CB90

3970131000-**2016-04-30** | CB90

3970429000-**2016-03-31** | CB90

--------------------------------

感谢您的帮助!这是我的查询供参考。

  select [Customer #] + '-' + cast(CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,[Activation Date])+1,0)) AS date) as nvarchar) as Lens, 
  item AS PCAT
  FROM  [NasrWeb].[dbo].[LensBankInfo] 
     where [activation date]  
     between '2016-01-01' AND GETDATE()
     group by [Customer #] + '-' + cast(CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,[Activation Date])+1,0)) AS date) as nvarchar), item
     ORDER BY LENS desc

3 个答案:

答案 0 :(得分:1)

如何使用right()

order by right(lens, 10)

答案 1 :(得分:1)

由于该字符串中的日期基本上是[Activation Date]月份的最后一天,您可以对该列进行排序(在汇总后):

ORDER BY Max([Activation Date]) DESC

答案 2 :(得分:1)

首先,我不确定为什么你有这个小组,因为你没有聚合任何数据。如果您删除该组,您只需按订单排序即可     CAST(DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,[激活日期])+ 1,0))AS日期)并使用desc

select [Customer #] + '-' + cast(CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,    [Activation Date])+1,0)) AS date) as nvarchar) as Lens, 
item AS PCAT
FROM  [NasrWeb].[dbo].[LensBankInfo] 
where [activation date]  
between '2016-01-01' AND GETDATE()
order by CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,[Activation Date])+1,0)) AS date) 

如果您实际上正在聚合和计算某些内容但未将其包含在您的示例中,那么您可以将日期部分的公式添加到您的组中,因为它不会影响任何内容,然后按顺序排序。