首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按特定顺序选择月份的SQL查询,如从3月到2月、从4月到3月、从11月到10月

按特定顺序选择月份的SQL查询,如从3月到2月、从4月到3月、从11月到10月
EN

Stack Overflow用户
提问于 2013-01-31 14:15:27
回答 4查看 2.8K关注 0票数 0

我必须编写一个查询来按特定的顺序选择月份,比如从3月到2月,或者从2月到1月。我不能使用存储过程。我必须使用SELECT,在数据库中,月份的名称存储为“一月”、“二月”、“三月”等等……

在获取月份时,我只需要前3个字符。

结果应该是

代码语言:javascript
复制
jan 1
feb 2
mar 3
apr 4
may 5
jun 6
jul 7
aug 8
sep 9
oct 10
nov 11
dec 12

使用此查询后

代码语言:javascript
复制
Select distinct upper(convert(varchar(3),datename(MONTH,InvoiceDate))) as monthName,upper(convert(nvarchar,datepart(mm,InvoiceDate))) as 
    mon  
from OpenInvoiceDetails 
order by mon

我得到了

代码语言:javascript
复制
jan 1
oct 10
nov 11
dec 12
feb 2
mar 3
apr 4
may 5
jun 6
jul 7
aug 8
sep 9
EN

回答 4

Stack Overflow用户

发布于 2013-01-31 14:30:02

我在这里做了很多假设,但像这样的东西是可行的:

代码语言:javascript
复制
    Create Table Months
(
    DateColumn varchar(20)
)

INSERT INTO Months

SELECT 'January' 
UNION
SELECT 'February'
UNION
SELECT 'March'
UNION
SELECT 'April'
UNION
SELECT'May' 
UNION
SELECT 'June' 
UNION
SELECT 'July' 
UNION
SELECT 'August'
UNION
SELECT 'September'
UNION
 SELECT'October' 
UNION
SELECT 'November'
UNION
SELECT 'December'

SELECT  DateColumn ,( CASE DateColumn
            WHEN 'January' THEN 1
            WHEN 'February' THEN 2
            WHEN 'March' THEN 3
            WHEN 'April' THEN 4
            WHEN 'May' THEN 5
            WHEN 'June' THEN 6
            WHEN 'July' THEN 7
            WHEN 'August' THEN 8
            WHEN 'September' THEN 9
            WHEN 'October' THEN 10
            WHEN 'November' THEN 11
            WHEN 'December' THEN 12
          END ) as [Month]
From Months
Order by Month

为您提供以下内容:

代码语言:javascript
复制
January 1
February    2
March   3
April   4
May 5
June    6
July    7
August  8
September   9
October 10
November    11
December    12

按月排序说明:

代码语言:javascript
复制
December    12
November    11
October 10
September   9
August  8
July    7
June    6
May 5
April   4
March   3
February    2
January 1
票数 0
EN

Stack Overflow用户

发布于 2013-01-31 14:34:22

这并不是最优的,但它应该可以解决无效的列名。

代码语言:javascript
复制
Select distinct upper(convert(varchar(3),datename(MONTH,InvoiceDate))) as monthName
,upper(convert(nvarchar,datepart(mm,InvoiceDate))) as mon 
from 
 OpenInvoiceDetails 
order by Len(convert(nvarchar,datepart(mm,InvoiceDate))),
convert(nvarchar,datepart(mm,InvoiceDate))
票数 0
EN

Stack Overflow用户

发布于 2013-01-31 14:37:03

一种选择是更改您的ORDER BY

代码语言:javascript
复制
ORDER BY Cast(mon as int) 

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14619568

复制
相关文章

相似问题

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