We use CAST and CONVERT to change data from one type to another, like turning text into numbers or dates. This helps us work with data in the right way.
CAST and CONVERT for type changes in SQL
CAST(expression AS target_data_type)
CONVERT(target_data_type, expression [, style])CAST is standard SQL and works in most databases.
CONVERT is often used in SQL Server and allows an optional style for formatting.
SELECT CAST('123' AS INT);
SELECT CONVERT(VARCHAR, GETDATE(), 23);
SELECT CAST(123.45 AS INT);
This query converts a text date to a date type, then converts it back to a string in MM/DD/YYYY format.
SELECT CAST('2024-06-01' AS DATE) AS ConvertedDate, CONVERT(VARCHAR, CAST('2024-06-01' AS DATE), 101) AS FormattedDate;
CAST is more portable across different SQL databases.
CONVERT's style parameter is useful for date and time formatting in SQL Server.
Be careful converting types that don't match well, like text that isn't a number.
CAST and CONVERT change data types to help with calculations and formatting.
CAST is standard SQL; CONVERT has extra formatting options in some databases.
Use them to fix data type mismatches and display data nicely.
Practice
CAST or CONVERT in SQL?Solution
Step 1: Understand the function of CAST and CONVERT
Both CAST and CONVERT are used to change the data type of a value in SQL.Step 2: Compare with other options
Deleting rows, creating tables, and joining tables are unrelated to changing data types.Final Answer:
To change the data type of a value -> Option AQuick Check:
CAST and CONVERT change types = A [OK]
- Thinking CAST deletes data
- Confusing CONVERT with table creation
- Mixing data type change with joins
Solution
Step 1: Recall CAST syntax
CAST requires the format CAST(value AS datatype), so CAST('123' AS INT) is correct.Step 2: Check other options
Options A, B, and D use incorrect order or syntax for CAST or CONVERT.Final Answer:
CAST('123' AS INT) -> Option AQuick Check:
CAST(value AS type) = C [OK]
- Swapping value and datatype order
- Using CONVERT with wrong argument order
- Missing AS keyword in CAST
SELECT CAST('2024-06-15' AS DATE) AS ConvertedDate;What will be the output type of
ConvertedDate?Solution
Step 1: Analyze the CAST operation
The query casts the string '2024-06-15' to the DATE data type.Step 2: Determine the output type
Since CAST converts to DATE, the output column ConvertedDate will be of type Date.Final Answer:
Date -> Option DQuick Check:
CAST to DATE returns Date type = D [OK]
- Assuming output stays string
- Confusing DATE with integer
- Thinking CAST changes value format only
SELECT CONVERT(INT, 'abc123');
Solution
Step 1: Check CONVERT syntax
CONVERT(INT, 'abc123') is correct syntax in some SQL dialects like SQL Server.Step 2: Consider conversion feasibility
Trying to convert 'abc123' to INT causes a runtime error because 'abc123' is not numeric.Final Answer:
Runtime error converting non-numeric string to INT -> Option CQuick Check:
Non-numeric string to INT causes runtime error = A [OK]
- Assuming CONVERT always succeeds
- Confusing syntax error with runtime error
- Expecting implicit string to int conversion
Orders with a column OrderDate stored as VARCHAR in format 'YYYYMMDD'.Which SQL query correctly converts
OrderDate to a DATE type and selects orders from June 2024?Options:
A) SELECT * FROM Orders WHERE CAST(OrderDate DATE) BETWEEN '2024-06-01' AND '2024-06-30';
B) SELECT * FROM Orders WHERE CONVERT(DATE, OrderDate, 112) BETWEEN '2024-06-01' AND '2024-06-30';
C) SELECT * FROM Orders WHERE CAST(OrderDate AS INT) BETWEEN 20240601 AND 20240630;
D) SELECT * FROM Orders WHERE CONVERT(INT, OrderDate) BETWEEN 20240601 AND 20240630;
Solution
Step 1: Understand the data format and conversion
OrderDate is VARCHAR in 'YYYYMMDD' format. CONVERT with style 112 converts this string correctly to DATE.Step 2: Evaluate each option
Option B only only tries CAST without style, which may fail or misinterpret format. Option B only only uses CONVERT with style 112, correct for 'YYYYMMDD'. Options C and D convert to INT, which is not reliable for date comparisons.Final Answer:
Option B only -> Option BQuick Check:
CONVERT with style 112 converts 'YYYYMMDD' to DATE = B [OK]
- Using CAST without format for 'YYYYMMDD'
- Converting dates to INT for comparison
- Ignoring CONVERT style parameter
Ready to prove it?
Pass the test and this pattern moves unknown
