SQL Server Documentation T-SQL Reference

Casting and Conversion Functions

Casting and conversion functions in SQL Server allow you to change the data type of an expression. This is crucial for performing operations between columns of different data types, storing data in the most efficient format, and ensuring data integrity.

Core Conversion Functions

CAST()

The CAST() function converts an expression from one data type to another. It is the ANSI standard function for type conversion.

CAST ( expression AS data_type [ ( length ) ] )

Example:

SELECT CAST('123' AS INT); -- Returns the integer 123
            SELECT CAST(GETDATE() AS VARCHAR(10)); -- Returns the current date as a string 'YYYY-MM-DD'
            

CONVERT()

The CONVERT() function is similar to CAST() but offers more control over the conversion, especially for date and time formats, and character data. It also supports style codes.

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Examples:

SELECT CONVERT(INT, '456'); -- Returns the integer 456
            SELECT CONVERT(VARCHAR(20), GETDATE(), 101); -- Returns the current date in US format (e.g., 'MM/DD/YYYY')
            SELECT CONVERT(VARCHAR(50), 12345.678, 2); -- Returns '12,345.68' (locale-specific)
            

TRY_CAST() and TRY_CONVERT()

These functions are safer alternatives as they return NULL if the conversion fails, rather than raising an error. This is highly recommended for data cleansing and validation.

TRY_CAST ( expression AS data_type [ ( length ) ] )
            TRY_CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Example:

SELECT TRY_CAST('abc' AS INT); -- Returns NULL
            SELECT TRY_CONVERT(DATE, '2023-13-01'); -- Returns NULL (invalid month)
            

Common Conversion Scenarios

Numeric Conversions

Converting strings to numbers and vice-versa. Be mindful of potential errors if the string is not a valid number.

SELECT CAST(123.45 AS INT); -- Returns 123
            SELECT CONVERT(VARCHAR, 987); -- Returns '987'
            

Date and Time Conversions

Converting strings to date/time types and formatting date/time values into strings.

SELECT CAST('2023-10-27' AS DATE);
            SELECT CONVERT(DATETIME, '2023-10-27 10:30:00');
            SELECT CONVERT(VARCHAR(10), GETDATE(), 103); -- DD/MM/YYYY format
            
Note: Always check the style codes for CONVERT() when dealing with date and time formats to ensure you get the desired output.

String Conversions

Converting other data types to strings. Useful for concatenation or displaying data.

SELECT 'Order ID: ' + CAST(OrderID AS VARCHAR(10)) FROM Orders;
            SELECT CONCAT('Value: ', 100.50); -- CONCAT is often more convenient for string concatenation
            

Implicit vs. Explicit Conversion

SQL Server performs implicit conversions automatically when data types are different in an operation. However, relying on implicit conversions can lead to unexpected results or performance issues. Explicit conversion, using functions like CAST() and CONVERT(), is always preferred for clarity and control.

Warning: Implicit conversions might not always work as expected and can sometimes result in data loss or errors. Explicitly specify your conversions whenever possible.

Data Type Precedence

When an operation involves two expressions of different data types, the data type with the higher precedence is promoted to the data type with the lower precedence. For example, when adding an INT and a DECIMAL, the INT is implicitly converted to a DECIMAL before the addition.

Best Practices