我有一个名为" Mon-YY" (varchar(n)数据类型)在我的一个表中,其值如下:
8月12日
月-12
OCT-12
NOV-12
DEC-12
一月13
FEB-13
MAR-13
APR-13
月-13
钧13
我想比较这些值,并根据指定的日期范围从表中检索记录。
我假设我需要将上述值转换为DATE格式。但是,我不确定如何跟踪日子。
答案 0 :(得分:0)
要将这些值转换为日期,您应该使用:
SELECT CONVERT(VARCHAR(20), '01 ' + [Mon-YY], 6) as BeginOfInterval
要获得一个月的最后一天,您应该使用(look here):
SELECT DATEADD(s,-1,DATEADD(mm,
DATEDIFF(m,0,CONVERT(VARCHAR(20), '01 ' + [Mon-YY], 6))+1,0)) as EndOfInterval
然后您可以使用这两个查询来获取间隔的第一个和最后一个日期。
答案 1 :(得分:0)
您可以使用DATEPART
功能,但需要在完整日期执行此操作:
SELECT DATEPART(MM, 'Aug-12') --> error
SELECT DATEPART(MM', 01-Aug-12') --> 8
所以尝试这样的事情:
SELECT
DATEPART(MM, CONCAT('01-', [Mon-YY])) AS TheMonth,
DATEPART(YYYY, CONCAT('01-', [Mon-YY])) AS TheYear
FROM myTable
ORDER BY TheYear, TheMonth
答案 2 :(得分:0)
SELECT CONVERT (date, REPLACE (MyColumn, '-', ' 01 '))
FROM MyTable
这样的事情会给你一个约会。这将永远是本月的第一天。您可以在WHERE子句中使用带&lt ;,>或BETWEEN的表达式。我不知道为什么你需要跟踪它们。
答案 3 :(得分:0)
我使用演员
-- example table and data
DECLARE @table table
(
[Mon-YY] varchar(20)
)
insert into @table values ('Aug-12')
insert into @table values ('Sep-12')
insert into @table values ('Oct-12')
insert into @table values ('Nov-12')
insert into @table values ('Dec-12')
insert into @table values ('Jan-13')
insert into @table values ('Feb-13')
insert into @table values ('Mar-13')
insert into @table values ('Apr-13')
insert into @table values ('May-13')
insert into @table values ('Jun-13')
select cast('01-' + [Mon-YY] as Date)
from @table
答案 4 :(得分:0)
解决方案是将列转换为更容易排序的数字。 Bellow I我在全年转换列,然后是月份(数字索引1到12),但这仅用于order by子句。
select *
from theTable
--where ???
order by case when right([mon-yy],2) <= 70 then '19' else '20' end +
right([mon-yy],2) +
case left([mon-yy],3)
when 'Jan' then '01'
when 'Feb' then '02'
when 'Mar' then '03'
when 'Apr' then '04'
when 'May' then '05'
when 'Jun' then '06'
when 'Jul' then '07'
when 'Aug' then '08'
when 'Sep' then '09'
when 'Oct' then '10'
when 'Nov' then '11'
when 'Dec' then '12'
end