【问题标题】:How to sort month in a table when retrieving using the sql query?使用sql查询检索时如何对表中的月份进行排序?
【发布时间】:2017-03-16 15:34:34
【问题描述】:

我有一个从表中获取月份名称的查询。但是这个列不是日期时间数据类型,它是一个varchar 列。如何按照月份名称升序排序?
这是我目前得到的输出。

八月
十一月
十月
九月

这是我的查询

select distinct(payemnt_month) as month from payement_details

【问题讨论】:

  • 表格中还有其他对应的日期或日期时间列吗?
  • 不,我没有其他日期时间列

标签: sql-server sql-server-2008 select-query


【解决方案1】:

在下面使用我已将您的月份附加到日期和年份。然后我正在提取月份数

select * from payment_details order by DATEPART(MM,payemnt_month+'01'+'00')

更新 如果可能,请更新您的查询,如下所示。

SELECT * FROM 
(
SELECT DISTINCT month,
                Datepart(MM, payemnt_month+ '01' + '00') MONTHNO
FROM   payment_details )A
ORDER  BY MONTHNO

如果您没有任何问题可以保留月份,则如下所示

   SELECT DISTINCT month,
                        Datepart(MM, payemnt_month+ '01' + '00') MONTHNO
        FROM   payment_details
order by month,Datepart(MM, payemnt_month+ '01' + '00')

【讨论】:

  • 我尝试根据我的情况更改查询。但它给了我以下错误。如果指定了 SELECT DISTINCT,则消息 145、级别 15、状态 1、第 4 行 ORDER BY 项必须出现在选择列表中。
  • 您在 distinct 之后指定了哪些列和所有列?你能发布你的整个查询吗?
  • 这是整个查询
  • @Mike 现在更新后检查。
【解决方案2】:
ORDER BY CASE WHEN payment_month='August' THEN 8
              WHEN payment_month='November' THEN 11
              WHEN payment_month='October' THEN 10
              WHEN payment_month='September' THEN 9 END

如上所述构建您的ORDER BY 子句,并根据需要将剩余月份添加到其中。

【讨论】:

    【解决方案3】:

    只需将 order by 子句设置为:

    select distinct(payemnt_month) as month from payement_details order by payemnt_month
    

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2015-08-02
      相关资源
      最近更新 更多