Connecting Tech Pros Worldwide Help | Site Map

Datetime comparison problem

  #1  
Old November 1st, 2008, 01:05 PM
Sreenivas
Guest
 
Posts: n/a
Hi every one,
I need to compare to datetime values , done in
stored procedure.The input datetime parameter is in
dd/mm/yyyy hh:mm:ss AM/PM format ,the datetime values to be compared
are also stored with the same format.
does datetime works fine for AM/PM format also? because some test
conditions are failing , which i thought correct..Help me out!
Thanks in advance..
  #2  
Old November 1st, 2008, 02:55 PM
Erland Sommarskog
Guest
 
Posts: n/a

re: Datetime comparison problem


Sreenivas (thatiparthysreenivas@gmail.com) writes:
Quote:
I need to compare to datetime values , done in
stored procedure.The input datetime parameter is in
dd/mm/yyyy hh:mm:ss AM/PM format ,the datetime values to be compared
are also stored with the same format.
does datetime works fine for AM/PM format also? because some test
conditions are failing , which i thought correct..Help me out!
datetime is a binary data type and does not have a format, least of all
one with AM/PM. If you have data as strings in your application, you
should use parameterised statements, so that the strings are converted
in the client with respect to regional settings.

Show us the code your having problem with, and we should be able to tell
what you are doing wrong.


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

Links for SQL Server Books Online:
SQL 2008: http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005: http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000: http://www.microsoft.com/sql/prodinf...ons/books.mspx

  #3  
Old November 2nd, 2008, 03:05 AM
Sreenivas
Guest
 
Posts: n/a

re: Datetime comparison problem


On Nov 1, 6:34 pm, Erland Sommarskog <esq...@sommarskog.sewrote:
Quote:
Sreenivas (thatiparthysreeni...@gmail.com) writes:
Quote:
I need to compare to datetime values , done in
stored procedure.The input datetime parameter is in
dd/mm/yyyy hh:mm:ss AM/PM format ,the datetime values to be compared
are also stored with the same format.
does datetime works fine for AM/PM format also? because some test
conditions are failing , which i thought correct..Help me out!
>
datetime is a binary data type and does not have a format, least of all
one with AM/PM. If you have data as strings in your application, you
should use parameterised statements, so that the strings are converted
in the client with respect to regional settings.
>
Show us the code your having problem with, and we should be able to tell
what you are doing wrong.
>
--
Erland Sommarskog, SQL Server MVP, esq...@sommarskog.se
>
Links for SQL Server Books Online:
SQL 2008:http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005:http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000:http://www.microsoft.com/sql/prodinf...ons/books.mspx
======================================
from client ,I have used mm/dd/yyyy hh:mm:ss AM/PM format,same format
is sent to stored procedure,

create procedure sp_checkAvailability(@ip_fromTime
datetime,@ip_toTime datetime)
as
begin
if exists(
select * from conferenceHall c where
(@ip_fromTime< c.fromTime AND @ip_toTime <=c.fromTime)
AND
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
)
print ' Ok'
else
print 'NotOk'


question is , is this comparison works for all types AM/PM format of
@ip_toTime ,@ip_fromTime values
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
because c.fromTime is stored in binary format,
but i dont know how sql server handles @ip_fromTime datetime
values ,since it is input parameter , not yet stored right!

thanks,
Srinivas Reddy Thatiparthy,
  #4  
Old November 2nd, 2008, 11:15 AM
Erland Sommarskog
Guest
 
Posts: n/a

re: Datetime comparison problem


Sreenivas (thatiparthysreenivas@gmail.com) writes:
Quote:
from client ,I have used mm/dd/yyyy hh:mm:ss AM/PM format,same format
is sent to stored procedure,
But how did you call the stored procedure? If you let the API convert
the string, you should be alright, provided that this date format
agree with your regional settings. (Then again, in the headers of your
post, I see an IP address that I can locate to Karanataka in India,
why I would expect your regional settings be set to dd/mm/yyyy.)

If you sent an EXEC string (which you shouldn't), conversion happens on
the SQL Server side. The AM/PM part is likely to be understood no matter
the settings, but xx/yy/zzzz could be taken as MM/DD/YYYY or DD/MM/YYYY
depending on the language and date format settings in SQL Server.
Quote:
create procedure sp_checkAvailability(@ip_fromTime
datetime,@ip_toTime datetime)
as
begin
if exists(
select * from conferenceHall c where
(@ip_fromTime< c.fromTime AND @ip_toTime <=c.fromTime)
AND
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
)
print ' Ok'
else
print 'NotOk'
>
>
question is , is this comparison works for all types AM/PM format of
@ip_toTime ,@ip_fromTime values
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
because c.fromTime is stored in binary format,
but i dont know how sql server handles @ip_fromTime datetime
values ,since it is input parameter , not yet stored right!
I don't know what your code intends to achieve, but it looks funny. Assuming
that @ip_fromTime <= @ip_toTime and conference.fromTime <
conferenceHall.toTime, this will always print 'OK'. Given these
assumptions, it's logically impossible that for the same row that
@ip_fromTime can at the same be less than c.fromTime and greater than
toTime.

If the purpose is to see whether there is any rows that do not overlap
with the interval in the parameters, try:

IF NOT EXISTS (SELECT * FROM conferenceHall c
WHERE @ip_fromTime <= c.toTime
AND @ip_toTime >= c.fromTime)
PRINT 'Hall available'
ELSE
PRINT 'Hall booked'

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

Links for SQL Server Books Online:
SQL 2008: http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005: http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000: http://www.microsoft.com/sql/prodinf...ons/books.mspx

  #5  
Old November 3rd, 2008, 04:45 AM
Sreenivas
Guest
 
Posts: n/a

re: Datetime comparison problem


On Nov 2, 3:56*pm, Erland Sommarskog <esq...@sommarskog.sewrote:
Quote:
Sreenivas (thatiparthysreeni...@gmail.com) writes:
Quote:
from client ,I have used *mm/dd/yyyy hh:mm:ss AM/PM format,same format
is sent to stored procedure,
>
But how did you call the stored procedure? If you let the API convert
the string, you should be alright, provided that this date format
agree with your regional settings. (Then again, in the headers of your
post, I see an IP address that I can locate to Karanataka in India,
why I would expect your regional settings be set to dd/mm/yyyy.)
>
If you sent an EXEC string (which you shouldn't), conversion happens on
the SQL Server side. The AM/PM part is likely to be understood no matter
the settings, but xx/yy/zzzz could be taken as MM/DD/YYYY or DD/MM/YYYY
depending on the language and date format settings in SQL Server.
>
>
>
Quote:
create procedure sp_checkAvailability(@ip_fromTime
datetime,@ip_toTime *datetime)
as
begin
if exists(
select * from conferenceHall c *where
(@ip_fromTime< c.fromTime AND @ip_toTime <=c.fromTime)
AND
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
*)
print ' Ok'
else
print 'NotOk'
>
Quote:
question is , is this comparison works for all types AM/PM format of
@ip_toTime ,@ip_fromTime *values
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
because c.fromTime is stored in binary format,
but i dont know how sql server handles @ip_fromTime datetime
values ,since it is input parameter , not yet stored right!
>
I don't know what your code intends to achieve, but it looks funny. Assuming
that @ip_fromTime <= @ip_toTime and conference.fromTime <
conferenceHall.toTime, this will always print 'OK'. Given these
assumptions, it's logically impossible that for the same row that
@ip_fromTime can at the same be less than c.fromTime and greater than
toTime.
>
If the purpose is to see whether there is any rows that do not overlap
with the interval in the parameters, try:
>
* IF NOT EXISTS (SELECT * FROM conferenceHall c
* * * * * * * * *WHERE *@ip_fromTime <= c.toTime
* * * * * * * * * *AND *@ip_toTime >= c.fromTime)
* * *PRINT 'Hall available'
* ELSE
* * *PRINT 'Hall booked'
>
--
Erland Sommarskog, SQL Server MVP, esq...@sommarskog.se
>
Links for SQL Server Books Online:
SQL 2008:http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005:http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000:http://www.microsoft.com/sql/prodinf...ons/books.mspx
Sorry ! i mistyped it ..
Quote:
Quote:
select * from conferenceHall c where
(@ip_fromTime< c.fromTime AND @ip_toTime <=c.fromTime)
It's not AND ..it's OR
Quote:
Quote:
OR
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
)
  #6  
Old November 3rd, 2008, 04:45 AM
Sreenivas
Guest
 
Posts: n/a

re: Datetime comparison problem


On Nov 2, 3:56*pm, Erland Sommarskog <esq...@sommarskog.sewrote:
Quote:
Sreenivas (thatiparthysreeni...@gmail.com) writes:
Quote:
from client ,I have used *mm/dd/yyyy hh:mm:ss AM/PM format,same format
is sent to stored procedure,
>
But how did you call the stored procedure? If you let the API convert
the string, you should be alright, provided that this date format
agree with your regional settings. (Then again, in the headers of your
post, I see an IP address that I can locate to Karanataka in India,
why I would expect your regional settings be set to dd/mm/yyyy.)
>
If you sent an EXEC string (which you shouldn't), conversion happens on
the SQL Server side. The AM/PM part is likely to be understood no matter
the settings, but xx/yy/zzzz could be taken as MM/DD/YYYY or DD/MM/YYYY
depending on the language and date format settings in SQL Server.
>
>
>
Quote:
create procedure sp_checkAvailability(@ip_fromTime
datetime,@ip_toTime *datetime)
as
begin
if exists(
select * from conferenceHall c *where
(@ip_fromTime< c.fromTime AND @ip_toTime <=c.fromTime)
AND
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
*)
print ' Ok'
else
print 'NotOk'
>
Quote:
question is , is this comparison works for all types AM/PM format of
@ip_toTime ,@ip_fromTime *values
(@ip_fromTime>=c.toTime AND @ip_toTime>c.toTime )
because c.fromTime is stored in binary format,
but i dont know how sql server handles @ip_fromTime datetime
values ,since it is input parameter , not yet stored right!
>
I don't know what your code intends to achieve, but it looks funny. Assuming
that @ip_fromTime <= @ip_toTime and conference.fromTime <
conferenceHall.toTime, this will always print 'OK'. Given these
assumptions, it's logically impossible that for the same row that
@ip_fromTime can at the same be less than c.fromTime and greater than
toTime.
>
If the purpose is to see whether there is any rows that do not overlap
with the interval in the parameters, try:
>
* IF NOT EXISTS (SELECT * FROM conferenceHall c
* * * * * * * * *WHERE *@ip_fromTime <= c.toTime
* * * * * * * * * *AND *@ip_toTime >= c.fromTime)
* * *PRINT 'Hall available'
* ELSE
* * *PRINT 'Hall booked'
>
--
Erland Sommarskog, SQL Server MVP, esq...@sommarskog.se
>
Links for SQL Server Books Online:
SQL 2008:http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005:http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000:http://www.microsoft.com/sql/prodinf...ons/books.mspx
Thanks..
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
DateTime comparison problem when use format() or dateValue() anniebai answers 4 February 20th, 2008 06:17 PM
Date comparison problem noone answers 3 September 27th, 2006 04:45 PM
SQL Date comparison problem... darrel answers 6 November 19th, 2005 08:13 AM
Date comparison problem puREp3s+ answers 2 July 20th, 2005 02:51 AM