【问题标题】:Order by date string in a concatenated SQL column在连接的 SQL 列中按日期字符串排序
【发布时间】:2017-02-08 19:17:42
【问题描述】:

所以我有一个非常棘手的问题,我无法弄清楚。 我有一个显示以下 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

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    首先,我不确定您为什么要分组,因为您没有汇总任何数据。如果您删除 group by,您可以按 order by CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,[Activation Date])+1,0)) AS date) 并使用 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) 
    

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

    【讨论】:

      【解决方案2】:

      right()怎么样?

      order by right(lens, 10)
      

      【讨论】:

        【解决方案3】:

        由于该字符串中的日期本质上是[Activation Date] 月份的最后一天,因此您可以只对该列进行排序(聚合后):

        ORDER BY Max([Activation Date]) DESC
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-09
          • 1970-01-01
          • 2017-12-16
          • 1970-01-01
          • 2014-02-01
          • 1970-01-01
          • 2018-07-07
          • 1970-01-01
          相关资源
          最近更新 更多