Improve company productivity with a Business Account.Sign Up

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1981
  • Last Modified:

Out-of-range datetime value

      <cfset datepassed = #DATEFORMAT(now(), "dd/mm/yy")#>

        SELECT  CONVERT(VARCHAR(10), TIMEDATE , 120) as varDate
        FROM orders
        WHERE YEAR(TIMEDATE)  = YEAR('#datepassed#')
        AND MONTH(TIMEDATE)  = MONTH('#datepassed#')
        AND DAY(TIMEDATE)  = DAY('#datepassed#')


The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
  • 3
  • 3
  • 2
1 Solution
DBAduck - Ben MillerPrincipal ConsultantCommented:
Whenever you use Datetime, you can either use mm/dd/yyyy or you can use a string of yyyymmdd.

If you are using a machine that has the Regional settings like UK then they will want the dd/mm/yyyy settings, then I would use the universal format yyyymmdd instead.
DBAduck - Ben MillerPrincipal ConsultantCommented:
Mark WillsTopic AdvisorCommented:
OK,  the    CONVERT(VARCHAR(10), TIMEDATE , 120)    is using a format number. That number is telling convert how to read/ interpret the variable TIMEDATE. Now if TIMEDATE is a legitimate datetime column, then no problems, it knows how to format. However, when using a string / variable such as datepassed, then it has to understand how it is formatted... So, before you can use datetime functions such as year, month, day, then it has to recognise the string as a date...

By the looks of things, you do not want time as a component, so, probably best to do something like :

FROM orders
WHERE convert(datetime,CONVERT(varchar(20), TIMEDATE , 106))  = convert(datetime,'#datepassed#',103)

basically allowing the datetime to do it's match without the time component, and expressing both fields as a legitimate datetime construct.
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

pigmentartsAuthor Commented:
thank you for all your help
pigmentartsAuthor Commented:

using your code i still get this...

Syntax error converting datetime from character string.
Mark WillsTopic AdvisorCommented:
use a 4 digit year in datepassed
Mark WillsTopic AdvisorCommented:
this works : select convert(datetime,'21/01/2008',103)
this fails : select convert(datetime,'21/01/08',103)

this works: select convert(datetime,'21/01/08',03)
this fails : select convert(datetime,'21/01/2008',03)

even though the books online show it as yy, it isn't really... remember how I said it must match - it is really , really fussy....

have a look at the codes below...

Without century (yy)      With century (yyyy)  Standard       Input/Output 
-                         0 or 100             Default        mon dd yyyy hh:miAM (or PM)
1                         101                  U.S.           mm/dd/yyyy
2                         102                  ANSI 
3                         103                  British/French dd/mm/yy
4                         104                  German        
5                         105                  Italian        dd-mm-yy
6                         106                  -              dd mon yy
7                         107                  -              Mon dd, yy
8                         108                  -              hh:mm:ss
-                         9 or 109             Default + ms   mon dd yyyy hh:mi:ss:mmmAM (or PM)
10                        110                  USA            mm-dd-yy
11                        111                  JAPAN          yy/mm/dd
12                        112                  ISO            yymmdd
-                         13 or 113            Europe         dd mon yyyy hh:mm:ss:mmm(24h)
14                        114                  -              hh:mi:ss:mmm(24h)
-                         20 or 120            ODBC canonical yyyy-mm-dd hh:mi:ss(24h)
-                         21 or 121            ODBC canonical yyyy-mm-dd hh:mi:ss.mmm(24h)
-                         126                  ISO8601        yyyy-mm-ddThh:mm:ss.mmm (no spaces)
                          127                  ISO8601        yyyy-mm-ddThh:mm:ss.mmmZ   where Z = time zone(no spaces)               
-                         130                  Hijri          dd mon yyyy hh:mi:ss:mmmAM
-                         131                  Hijri          dd/mm/yy hh:mi:ss:mmmAM

Open in new window

pigmentartsAuthor Commented:
i see what you mean now. just had to get my head around it. working now thanks
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now