[AccessD] Date Problem

Stuart McLachlan stuart at lexacorp.com.pg
Wed Dec 8 21:50:45 CST 2004


On 9 Dec 2004 at 4:09, MastercafeCTV wrote:

> We check this many time and this is not the problem.
> 
> Actually we use Spanish format to introduce all date dd/mm/yyyy and when we
> need a SQL filter try to put Format(field;'yyyymmdd') to void the problem.
> 
> Look this:
> Field 1 	Field 2	Field 3
> Cname1	01/03/2001	Some data
> Cname2	01/04/2001	Some data
> Cname3	01/05/2001	Some data
> Cname4	01/06/2001	Some data
> Cname5	01/07/2001	Some data
> Cname6	01/08/2001	Some data
> Cname7	01/09/2001	Some data
> Cname8	01/10/2001	Some data
> Cname9	01/11/2001	Some data
> 
OK -  the above are displayed in your short date format of dd/mm/yy

> If we try to Select * from DDBB where field2>=#01/06/2001# Normally you must
> be obtain Cname4 to 9, but we obtain all (01 is month)

SQL "Select ...... #...#"  assumes a US date format mm/dd/yyyy if valid so 
it selects everything greater than 6 Jan 2001.  

> If we try to Select * from DDBB where field2>=#13/06/2001# Normally you must
> be obtain Cname5 to 9 in this case run perfect (13 is day)

SInce 13 is not a valid month, the SQL falls back to the second *possible* 
(see below re 2 digit years)  interpretation and uses 13 Jun 2001 instead. 

> Then we change our SQl to Select * from DDBB where
> format(field2,'yyyymmdd')>='20010601' you must be obtain Cname4 to 9 and in
> this case run perfect again.

That's logical.

> Why sometimes change Day with Month?.. Not in Control Panel, not in Access
> Options... Where?? And why? A feel stupid with this yet.
> 
It only changes from the standard US mm/dd/yyyy (or mm/dd/yy) where that 
interpretation does not return a valid date.  Note that if you use a two 
digit year, it tries  yy/mm/dd as the second interpretation before getting 
round to trying dd/mm/yy  so 13/06/01 is likely to end up interpreted 1 Jun 
2013 :-( 


One solution is to use an  unambigous format for comparison such as 

Select * from DDBB where  field2 > "1 Jun 2001"

If pulling the comparison from a text box etc, I always use:
Select * from DDBB where field2 > Datevalue('" & txtTextBox & "'")
That way, it doesn't matter how the the text box and regional settings are 
configured, it always does the comparison using the underlying value of the 
control/field.



-- 
Stuart





More information about the AccessD mailing list