SQL - The conversion of a varchar data type to a datetime data type resulted in an out-of-range v...
Categories:
Resolving 'Conversion of varchar to datetime resulted in an out-of-range value' in SQL Server

This article provides comprehensive solutions and best practices for troubleshooting and preventing the common SQL Server error: 'The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.'
The error message 'The conversion of a varchar data type to a datetime data type resulted in an out-of-range value' is a frequent hurdle for SQL Server developers and administrators. It typically arises when attempting to convert a string (varchar) into a datetime data type, but the string's format or content does not conform to a valid date or time representation that SQL Server can understand, or it represents a date outside the supported range. Understanding the root causes and implementing robust conversion strategies are crucial for maintaining data integrity and application stability.
Understanding the Root Causes
This error primarily occurs due to two main reasons: invalid date format or out-of-range date values. SQL Server expects specific date formats, and if the input string deviates from these, the conversion will fail. Additionally, SQL Server's datetime data type has a supported range from January 1, 1753, to December 31, 9999. Any date outside this range will also trigger an 'out-of-range' error.
flowchart TD
A[Input Varchar Date String] --> B{Is String Format Valid?}
B -- No --> C[Conversion Error: Invalid Format]
B -- Yes --> D{Is Date Value In Range (1753-9999)?}
D -- No --> E[Conversion Error: Out-of-Range Value]
D -- Yes --> F[Successful Datetime Conversion]Flowchart illustrating the decision process for datetime conversion in SQL Server.
Common Scenarios and Solutions
Addressing this error involves identifying the problematic string values and applying appropriate conversion functions or data cleansing techniques. Here are the most common scenarios and their solutions.
SELECT DISTINCT YourDateColumn FROM YourTable can reveal inconsistent or invalid date strings.1. Inconsistent Date Formats
One of the most frequent causes is having mixed or unexpected date formats in your varchar column. For example, some entries might be 'YYYY-MM-DD', others 'MM/DD/YYYY', and some 'DD-MM-YYYY'.
SELECT CONVERT(DATETIME, '2023-10-26'); -- Works
SELECT CONVERT(DATETIME, '10/26/2023'); -- Works (depends on @@LANGUAGE/DATEFORMAT)
SELECT CONVERT(DATETIME, '26-10-2023'); -- Fails if default is not DMY
SELECT CONVERT(DATETIME, 'October 26, 2023'); -- Works
Examples of various date string formats and their conversion behavior.
To handle inconsistent formats, use the CONVERT function with a specific style parameter, or the more robust TRY_CONVERT or TRY_PARSE functions.
-- Using CONVERT with style codes
SELECT CONVERT(DATETIME, '26-10-2023', 105); -- Style 105 for DD-MM-YYYY
SELECT CONVERT(DATETIME, '20231026', 112); -- Style 112 for YYYYMMDD
-- Using TRY_CONVERT (returns NULL on failure)
SELECT TRY_CONVERT(DATETIME, '26-10-2023', 105) AS ConvertedDate;
SELECT TRY_CONVERT(DATETIME, 'Invalid Date String') AS ConvertedDate;
-- Using TRY_PARSE (more flexible, requires .NET Framework 4.0+)
SELECT TRY_PARSE('26-10-2023' AS DATETIME USING 'en-GB') AS ParsedDate;
SELECT TRY_PARSE('10/26/2023' AS DATETIME USING 'en-US') AS ParsedDate;
SELECT TRY_PARSE('Invalid Date' AS DATETIME) AS ParsedDate;
Demonstrating CONVERT with style codes, TRY_CONVERT, and TRY_PARSE for safer conversions.
2. Out-of-Range Date Values
This occurs when the varchar string represents a date outside the datetime data type's supported range (1753-01-01 to 9999-12-31) or contains invalid date components (e.g., '2023-02-30').
SELECT CONVERT(DATETIME, '1700-01-01'); -- Fails: Out of range
SELECT CONVERT(DATETIME, '2023-02-30'); -- Fails: Invalid date component
SELECT CONVERT(DATETIME, '9999-12-31'); -- Works
SELECT CONVERT(DATETIME, '10000-01-01'); -- Fails: Out of range
Examples of out-of-range and invalid date component errors.
To handle this, you should validate the date string before conversion. ISDATE() can check for basic validity, but TRY_CONVERT and TRY_PARSE are generally preferred as they return NULL for invalid dates, allowing you to filter or handle them gracefully.
-- Using ISDATE() (less reliable for specific formats)
SELECT CASE WHEN ISDATE('2023-02-30') = 1 THEN CONVERT(DATETIME, '2023-02-30') ELSE NULL END;
-- Preferred: Using TRY_CONVERT to filter invalid dates
SELECT YourColumn
FROM YourTable
WHERE TRY_CONVERT(DATETIME, YourDateColumn) IS NULL
AND YourDateColumn IS NOT NULL; -- Find problematic rows
-- Update problematic rows (example: set to NULL or a default date)
UPDATE YourTable
SET YourDateColumn = NULL -- Or a valid default date like '1900-01-01'
WHERE TRY_CONVERT(DATETIME, YourDateColumn) IS NULL
AND YourDateColumn IS NOT NULL;
Using ISDATE() and TRY_CONVERT to identify and handle out-of-range or invalid date strings.
3. Empty Strings or NULL Values
An empty string '' cannot be converted to a datetime and will result in the same error. NULL values, however, convert to NULL datetime values without error.
SELECT CONVERT(DATETIME, ''); -- Fails
SELECT CONVERT(DATETIME, NULL); -- Works, returns NULL
Conversion behavior for empty strings and NULL values.
Always handle empty strings explicitly, typically by converting them to NULL before attempting a datetime conversion.
SELECT CONVERT(DATETIME, NULLIF(YourDateColumn, ''))
FROM YourTable;
Using NULLIF to convert empty strings to NULL before datetime conversion.
SET DATEFORMAT or SET LANGUAGE. While they can influence how SQL Server interprets ambiguous date strings (e.g., '01/02/2023' could be Jan 2 or Feb 1), relying on them can lead to inconsistent behavior across different sessions or environments. Explicit style codes with CONVERT are generally safer.Best Practices for Date Handling
To minimize these errors, adopt the following best practices:
1. Use ISO 8601 Formats
Whenever possible, store and exchange date strings in unambiguous ISO 8601 formats like 'YYYY-MM-DDTHH:MI:SS.mmm' (style 126) or 'YYYY-MM-DD' (style 23). These formats are universally understood by SQL Server regardless of DATEFORMAT or LANGUAGE settings.
2. Validate Input Data
Implement validation checks at the application layer or use TRY_CONVERT/TRY_PARSE in SQL to gracefully handle invalid date strings. Never assume input varchar data is always in a valid date format.
3. Use Appropriate Data Types
Store dates in DATE, DATETIME, DATETIME2, or SMALLDATETIME data types from the outset. Avoid storing dates as varchar unless absolutely necessary (e.g., for logging raw input) and always convert them immediately upon ingestion.
4. Cleanse Existing Data
If you have an existing column with problematic varchar date strings, use TRY_CONVERT to identify and cleanse the data. You might need to update invalid entries to NULL or a default valid date, or even manually correct them.
5. Specify Style Codes
When using CONVERT, always specify a style code to ensure consistent interpretation of date strings, especially for ambiguous formats like 'MM/DD/YYYY' vs 'DD/MM/YYYY'.