Unix Technical Forum

Querying date

This is a discussion on Querying date within the SQL Server forums, part of the Microsoft SQL Server category; --> Hello all, I'm trying to run a query to make a report. My database is a incident reporting database. ...


Go Back   Unix Technical Forum > Database Server Software > Microsoft SQL Server > SQL Server

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-29-2008, 05:36 AM
ndn_24_7
 
Posts: n/a
Default Querying date

Hello all,
I'm trying to run a query to make a report. My database is a incident
reporting database. I'm tryng to make a monthy report for incidents.
The field I need to query in the date field which is a nvarchar in the
form of 01/01/04 and 01/01/2004. I ran a query that looks like this:
SELECT incident, doccur, ID
FROM dbo.Incident
WHERE (doccur between '01/01/2004' and '01/31/2004')

I get some results that look like this:

Unsecured doors 01/19/04 92
INTOXICATION 01/17/04 77
Bill Door entry door 01/28/03 130
Hit & Run 01/21/04 105
Customer complaint 01/02/03 70
Customer complaint 01/02/04 91
PRINTER MALFUNCTION 01/22/04 111
Customer complaint 01/30/04 2322
Trash Smoldering 01/15/04 51
LOST 01/02/03 80
BROKEN GLASS PANEL 01/13/04 42
B.I.A. Assist 01/04/03 189
GAS LEAK 01/06/04 8
UNCHANGED CASH BOX 01/11/04 40
Intoxication 01/17/04 69
Intoxication 01/02/04 71
Intoxication 01/17/04 72
Employee accident 01/17/04 73
GREASE FIRE 01/18/04 74
Verbal Dispute 01/17/04 75
PANHANDLING 01/17/04 76
Near Miss/Water backup 01/18/04 78
Unsecured Arcade Door 01/19/04 93
Intoxication 01/18/04 79
Intoxication 01/02/04 81
SUSPECT/WANTED 01/18/04 82
Intoxication 01/18/04 83
Property Damage 01/20/03 84
Unsecured Bingo Snack Bar 01/18/04 85
PANHANDLING 01/18/04 86
Employee accident 01/19/04 87
Unauthorize of proper exit 01/19/04 88
Safety Hazard 01/19/04 89
Key control violation 01/02/03 90
Cracked keno ball 01/23/04 116
Employee accident 01/19/04 94
delay in drop 01/27/2003 128
test 01/01/2005 3763



As you can see, the querey will give me the month and day I ask for,but
not the right year. Some to the data has 2 digit years and some have 4
digits. How do I design the query to give me the year I ask for.
Any assistance will be greatly appreciated

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 02-29-2008, 05:36 AM
Simon Hayes
 
Posts: n/a
Default Re: Querying date


"ndn_24_7" <ndn_24_7@yahoo.com> wrote in message
news:1105646861.118444.238060@f14g2000cwb.googlegr oups.com...
> Hello all,
> I'm trying to run a query to make a report. My database is a incident
> reporting database. I'm tryng to make a monthy report for incidents.
> The field I need to query in the date field which is a nvarchar in the
> form of 01/01/04 and 01/01/2004. I ran a query that looks like this:
> SELECT incident, doccur, ID
> FROM dbo.Incident
> WHERE (doccur between '01/01/2004' and '01/31/2004')
>
> I get some results that look like this:
>
> Unsecured doors 01/19/04 92
> INTOXICATION 01/17/04 77
> Bill Door entry door 01/28/03 130
> Hit & Run 01/21/04 105
> Customer complaint 01/02/03 70
> Customer complaint 01/02/04 91
> PRINTER MALFUNCTION 01/22/04 111
> Customer complaint 01/30/04 2322
> Trash Smoldering 01/15/04 51
> LOST 01/02/03 80
> BROKEN GLASS PANEL 01/13/04 42
> B.I.A. Assist 01/04/03 189
> GAS LEAK 01/06/04 8
> UNCHANGED CASH BOX 01/11/04 40
> Intoxication 01/17/04 69
> Intoxication 01/02/04 71
> Intoxication 01/17/04 72
> Employee accident 01/17/04 73
> GREASE FIRE 01/18/04 74
> Verbal Dispute 01/17/04 75
> PANHANDLING 01/17/04 76
> Near Miss/Water backup 01/18/04 78
> Unsecured Arcade Door 01/19/04 93
> Intoxication 01/18/04 79
> Intoxication 01/02/04 81
> SUSPECT/WANTED 01/18/04 82
> Intoxication 01/18/04 83
> Property Damage 01/20/03 84
> Unsecured Bingo Snack Bar 01/18/04 85
> PANHANDLING 01/18/04 86
> Employee accident 01/19/04 87
> Unauthorize of proper exit 01/19/04 88
> Safety Hazard 01/19/04 89
> Key control violation 01/02/03 90
> Cracked keno ball 01/23/04 116
> Employee accident 01/19/04 94
> delay in drop 01/27/2003 128
> test 01/01/2005 3763
>
>
>
> As you can see, the querey will give me the month and day I ask for,but
> not the right year. Some to the data has 2 digit years and some have 4
> digits. How do I design the query to give me the year I ask for.
> Any assistance will be greatly appreciated
>


The use of nvarchar for dates is the real issue - if you clean up the dates
and change the data type to datetime, then you should have no problems, and
you will be able to use date functions correctly with the data. I appreciate
of course that you may have little control over the data model, but as
you've already seen, using the wrong data type just leads to incorrect or
inconsistent data, so it would be worth some effort to correct this.

The following query may work, but it depends on the quality of your data:

SELECT incident, doccur, ID
FROM dbo.Incident
WHERE cast(doccur as datetime) between '20040101' and '20040131'

Note that the format YYYYMMDD is always interpreted correctly by MSSQL,
whereas the US date format is ambiguous.

Simon


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 02-29-2008, 05:36 AM
Andy Williams
 
Posts: n/a
Default Re: Querying date

In addition to Simon's comments, have a look at
http://www.aspfaq.com/show.asp?id=2280

-Andy

"ndn_24_7" <ndn_24_7@yahoo.com> wrote in message
news:1105646861.118444.238060@f14g2000cwb.googlegr oups.com...
> Hello all,
> I'm trying to run a query to make a report. My database is a incident
> reporting database. I'm tryng to make a monthy report for incidents.
> The field I need to query in the date field which is a nvarchar in the
> form of 01/01/04 and 01/01/2004. I ran a query that looks like this:
> SELECT incident, doccur, ID
> FROM dbo.Incident
> WHERE (doccur between '01/01/2004' and '01/31/2004')
>
> I get some results that look like this:
>
> Unsecured doors 01/19/04 92
> INTOXICATION 01/17/04 77
> Bill Door entry door 01/28/03 130
> Hit & Run 01/21/04 105
> Customer complaint 01/02/03 70
> Customer complaint 01/02/04 91
> PRINTER MALFUNCTION 01/22/04 111
> Customer complaint 01/30/04 2322
> Trash Smoldering 01/15/04 51
> LOST 01/02/03 80
> BROKEN GLASS PANEL 01/13/04 42
> B.I.A. Assist 01/04/03 189
> GAS LEAK 01/06/04 8
> UNCHANGED CASH BOX 01/11/04 40
> Intoxication 01/17/04 69
> Intoxication 01/02/04 71
> Intoxication 01/17/04 72
> Employee accident 01/17/04 73
> GREASE FIRE 01/18/04 74
> Verbal Dispute 01/17/04 75
> PANHANDLING 01/17/04 76
> Near Miss/Water backup 01/18/04 78
> Unsecured Arcade Door 01/19/04 93
> Intoxication 01/18/04 79
> Intoxication 01/02/04 81
> SUSPECT/WANTED 01/18/04 82
> Intoxication 01/18/04 83
> Property Damage 01/20/03 84
> Unsecured Bingo Snack Bar 01/18/04 85
> PANHANDLING 01/18/04 86
> Employee accident 01/19/04 87
> Unauthorize of proper exit 01/19/04 88
> Safety Hazard 01/19/04 89
> Key control violation 01/02/03 90
> Cracked keno ball 01/23/04 116
> Employee accident 01/19/04 94
> delay in drop 01/27/2003 128
> test 01/01/2005 3763
>
>
>
> As you can see, the querey will give me the month and day I ask for,but
> not the right year. Some to the data has 2 digit years and some have 4
> digits. How do I design the query to give me the year I ask for.
> Any assistance will be greatly appreciated
>



Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 02-29-2008, 05:36 AM
ndn_24_7
 
Posts: n/a
Default Re: Querying date

Thank you for your reply,

I would agree that nvarchar for my date is a problem. Would anybody
know how to convert the dates to 4 digit years thru a query or do I
have to go change every date manually?After I change them to the
correct format, I'm assuming I can change the datatype to datetime.
Some of my date are 02/21/04 and some are 02/21/2004. The program has a
Access front end, So i guess I could use the find and replace function.
Any other suggestions will really help

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 02-29-2008, 05:36 AM
Andy Williams
 
Posts: n/a
Default Re: Querying date

ALTER TABLE incident ADD DateOccured datetime

UPDATE incident SET DateOccured = CAST(doccur AS datetime)


"ndn_24_7" <ndn_24_7@yahoo.com> wrote in message
news:1105648821.121164.51910@f14g2000cwb.googlegro ups.com...
> Thank you for your reply,
>
> I would agree that nvarchar for my date is a problem. Would anybody
> know how to convert the dates to 4 digit years thru a query or do I
> have to go change every date manually?After I change them to the
> correct format, I'm assuming I can change the datatype to datetime.
> Some of my date are 02/21/04 and some are 02/21/2004. The program has a
> Access front end, So i guess I could use the find and replace function.
> Any other suggestions will really help
>



Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 02-29-2008, 05:36 AM
ndn_24_7
 
Posts: n/a
Default Re: Querying date

One more question. Would I have to change the dates to 2004-02-21 in
order to change the datatype to datetime?

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 02-29-2008, 05:36 AM
ndn_24_7
 
Posts: n/a
Default Re: Querying date

I was able to convert all my dates to datetime. Now I can query by
date and all information is accurate.Thank you all so much for you
assistance.I greatly appreciat it.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #8 (permalink)  
Old 02-29-2008, 05:36 AM
Erland Sommarskog
 
Posts: n/a
Default Re: Querying date

ndn_24_7 (ndn_24_7@yahoo.com) writes:
> I would agree that nvarchar for my date is a problem. Would anybody
> know how to convert the dates to 4 digit years thru a query or do I
> have to go change every date manually?After I change them to the
> correct format, I'm assuming I can change the datatype to datetime.
> Some of my date are 02/21/04 and some are 02/21/2004. The program has a
> Access front end, So i guess I could use the find and replace function.
> Any other suggestions will really help


It seems that you have sorted out your dates by now, but nevertheless
some addditional information.

Like many other programs, SQL Server plays some guessing games based
on some settings. In case of SQL Server these are dateformat and
language, which are peculiare to SQL Server and not the regional
settings. '02/21/04' may give you what you want, it may give you
a different date in a different year, and you might even end up in
the wrong century, if you have a funny configuration of your server.

Anyway, here is an article that gives you the full story:
http://www.karaszi.com/SQLServer/info_datetime.asp.



--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techinf...2000/books.asp
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 12:39 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com