convert string to date format

Here is my query to get a list of all groups for all months.  I have also attached the output in a file.  As you can see from the data results, the Month column presents a challenge.  I would like to find all records between the months of December to February. How could I do so in SQL?  I imagine that I will have to convert the Month column to a date type somehow.

select P.Agency, M.Month, F.Description,F.GrossAmount,F.NetAmount,F.InKindAmount from tblOrgProfile P 
Join tblorgMonthlyReport M on M.AgencyID = P.AgencyID
Join tblOrgMonthlyFunds F on F.MonthlyID = M.MonthlyID
Where Agency <> 'Administrator'
order by Agency

Open in new window

output.xlsx
al4629740Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

HainKurtSr. System AnalystCommented:
maybe this:

DATEPART(month, some_Date) in (12,1,2)
0
Scott PletcherSenior DBACommented:
Honestly, I think it'd be more effort to force it to a date format than to just process it as is:

WHERE
    [Month] LIKE '%Dec%' OR
    [Month] LIKE '%Jan%' OR
    [Month] LIKE '%Feb%'
0
HainKurtSr. System AnalystCommented:
what values do you have? string like 'December', 'January', February'? Then:

month in ('December', 'January', February')
0
Newly released Acronis True Image 2019

In announcing the release of the 15th Anniversary Edition of Acronis True Image 2019, the company revealed that its artificial intelligence-based anti-ransomware technology – stopped more than 200,000 ransomware attacks on 150,000 customers last year.

al4629740Author Commented:
The problem is that from a vb6 form I am having a user choose from a date range and then I would retrieve it in SQL.

I would like to specify a date range which means the code would need to be more scalable for such a purpose.

Any other ideas?
0
al4629740Author Commented:
The value would be a beginning month and an ending month.

For example

December to February
0
HainKurtSr. System AnalystCommented:
what are you passing to query, and what values do you have in your table?
0
al4629740Author Commented:
I would be passing only two variables: December, February

The attached file shows what I have in my table related to months.
0
al4629740Author Commented:
Those are the typical variables
0
HainKurtSr. System AnalystCommented:
... where
DATEPART (month, M.Month) between GetMonth(@param1)+12 and GetMonth(@param2)+12

where GetMonth is a function like

create function GetMonth(@s varchar) returns int32 as 
begin
	return (case @s 
		when 'January' then 1
		...
		when 'December' then 12
	end
	);
end;

Open in new window

0
HainKurtSr. System AnalystCommented:
^^ is almost correct, I will find a way to check interval...
0
HainKurtSr. System AnalystCommented:
maybe this (fix for above query where I used +12):

... where
(
(DATEPART (month, M.Month) >= GetMonth(@param1) and DATEPART (month, M.Month)<=GetMonth(@param2)) or
(DATEPART (month, M.Month) <= GetMonth(@param1) and DATEPART (month, M.Month)>=GetMonth(@param2))
)
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
al4629740Author Commented:
I think the parenthesis are off.  I corrected here:

select P.Agency, M.Month, F.Description,F.GrossAmount,F.NetAmount,F.InKindAmount from tblOrgProfile P 
Join tblorgMonthlyReport M on M.AgencyID = P.AgencyID
Join tblOrgMonthlyFunds F on F.MonthlyID = M.MonthlyID
Where Agency <> 'Administrator' And
((DATEPART (month, M.Month) >= 7) and (DATEPART (month, M.Month) <= 12)) or
((DATEPART (month, M.Month) <= 7) and (DATEPART (month, M.Month) > 12))
order by Agency

Open in new window


The problem is that I get an error:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
0
al4629740Author Commented:
Nevermind, I think I found the problem
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.