Use 'in between' with varchar (sql server)

Using SQL Server 2005 Express.

(
    CONVERT(VARCHAR(8), R.reviewStart, 108) between CONVERT(VARCHAR(8), M.meetingStart, 108) and CONVERT(VARCHAR(8), M.meetingEnd, 108) OR
    CONVERT(VARCHAR(8), R.reviewEnd, 108) between CONVERT(VARCHAR(8), M.meetingStart, 108) and CONVERT(VARCHAR(8), M.meetingEnd, 108) OR
    CONVERT(VARCHAR(8), M.meetingStart, 108) between CONVERT(VARCHAR(8), R.reviewStart, 108) and CONVERT(VARCHAR(8), R.reviewEnd, 108) OR
    CONVERT(VARCHAR(8), M.meetingEnd, 108) between CONVERT(VARCHAR(8), R.reviewStart, 108) and CONVERT(VARCHAR(8), R.reviewEnd, 108)
)

Will the β€œbetween” still have the expected behavior after the datetimes have been converted to varchar?

thanks

+3
source share
3 answers

Yes, depending on what you mean by expected behavior. The BETWEEN statement treats these operands as varchars and applies the appropriate comparison rules:

BETWEEN returns TRUE if test_expression is greater than or equal to begin_expression and less than or equal to end_expression.

, . , . CONVERT 24- ?

, varchars.

, , WHERE false (, ).

, . , ?

+2

:

R.reviewStart >=  DATEADD(day, DATEDIFF(day, '19010101', M.meetingStart), '19010101') 
and R.reviewStart < DATEADD(day, 1+DATEDIFF(day, '19010101', M.meetingStart), '19010101') 

( : UDF ) .

0

, , SQL 2008 - t , , . 2005 .

0

Source: https://habr.com/ru/post/1709731/


All Articles