Hi Wal,


I am not suggesting this is necessarily the best approach, but at least it 
forces the expression evaluation order you want:


Select Value
>From   DatesTest
Where  1 = Case
             When IsDate(Value) = 1
               Then Case
                      When Cast(Value As datetime) > GetDate()
                        Then 1
                      Else
                        0
                    End
             Else
               0
           End;

Cheers,

Chris





-----Original Message-----
From: ozdotnet-boun...@ozdotnet.com [mailto:ozdotnet-boun...@ozdotnet.com] On 
Behalf Of Les Hughes
Sent: Monday, 29 October 2012 6:58 PM
To: ozDotNet
Subject: Re: [OT] sql convert datetime problem; forcing order of AND statements



Wallace Turner wrote:

> I'm running into an issue with a select query; it appears the CONVERT

> operator is performed before any other condition in the WHERE clause.

>

> Consider the data below:

>

>

>

> Now some queries,

> This one works, note only 6 rows are returned:

> |SELECT Value,CONVERT(DATETIME, [Value],6) from DatesTest

>     WHERE

>     IsDate([Value])=1 |

>

>

> This one does *not *work: Conversion failed when converting date

> and/or time from character string.

> |SELECT Value from DatesTest

>     WHERE

>     IsDate([Value])=1

>     AND CONVERT(DATETIME, [Value],6) > GETDATE()|

>

> 1) Why is the CONVERT statement being executed first?

> 2) How can the IsDate be forced to execute first so the second

> statement works?

>

> Cheers

>

> Wal



Hi Wal,



Short answer is: SQL does short-circuit based on a mysterious tarot-card engine 
it has internally. It will not reveal its hidden secrets.



Check this for more info:

http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx



It also links to here which shows a good illustration:

http://beingmarkcohen.com/?p=62



A CTE or the workarounds on the listed URLs are the way to go.

Best of luck :)

--

Les Hughes

l...@datarev.com.au<mailto:l...@datarev.com.au>

Reply via email to