parent
6a93ca0ff5
commit
70e2c6ec0c
1 changed files with 126 additions and 0 deletions
@ -0,0 +1,126 @@ |
|||||||
|
--- |
||||||
|
title: Conversion Functions |
||||||
|
description: Learn how to convert data between different types in SQL |
||||||
|
order: 140 |
||||||
|
type: lesson-challenge |
||||||
|
setup: | |
||||||
|
CREATE TABLE raw_data ( |
||||||
|
value VARCHAR(255) |
||||||
|
); |
||||||
|
|
||||||
|
INSERT INTO raw_data (value) |
||||||
|
VALUES ('123'), |
||||||
|
('456.78'), |
||||||
|
('abc'), |
||||||
|
('123.45'), |
||||||
|
('true'), |
||||||
|
('false'), |
||||||
|
('1'), |
||||||
|
('0'); |
||||||
|
|
||||||
|
CREATE TABLE imported_sales_data ( |
||||||
|
id_string VARCHAR(10), |
||||||
|
product_name VARCHAR(100), |
||||||
|
amount_string VARCHAR(20), |
||||||
|
sale_date VARCHAR(20) |
||||||
|
); |
||||||
|
|
||||||
|
INSERT INTO imported_sales_data (id_string, product_name, amount_string, sale_date) VALUES |
||||||
|
('1', 'Laptop', '999.99', '2024-01-15'), |
||||||
|
('2', 'Mouse', '24.99', '2024-01-16'), |
||||||
|
('', 'Keyboard', '59.99', '2024-01-17'), |
||||||
|
('4', 'Monitor', '', '2024-01-18'), |
||||||
|
('5', 'Headphones', '79.99', ''), |
||||||
|
('abc', 'USB Drive', '29.99', '2024-01-20'), |
||||||
|
('7', 'Webcam', 'N/A', '2024-01-21'), |
||||||
|
('', '', '', ''), |
||||||
|
('9', 'Printer', '299.99', '2024-01-23'), |
||||||
|
('10', 'Scanner', '199.99', '2024-01-24'); |
||||||
|
--- |
||||||
|
|
||||||
|
Conversion functions allow you to transform data from one type to another. These functions are essential when you need to ensure data compatibility or format data for specific operations. |
||||||
|
|
||||||
|
## Using CAST |
||||||
|
|
||||||
|
The `CAST` function is the standard SQL way to convert between data types. It's widely supported across all major databases: |
||||||
|
|
||||||
|
```sql |
||||||
|
-- Convert string to integer |
||||||
|
SELECT CAST('123' AS INTEGER); -- Returns: 123 |
||||||
|
|
||||||
|
-- Convert string to decimal |
||||||
|
SELECT CAST('123.45' AS DECIMAL(10,2)); -- Returns: 123.45 |
||||||
|
|
||||||
|
-- Convert number to string |
||||||
|
SELECT CAST(123.45 AS VARCHAR); -- Returns: '123.45' |
||||||
|
|
||||||
|
-- Convert string to date |
||||||
|
SELECT CAST('2024-03-15' AS DATE); -- Returns: 2024-03-15 |
||||||
|
|
||||||
|
-- Convert string to timestamp |
||||||
|
SELECT CAST('2024-03-15T12:00:00' AS TIMESTAMP); |
||||||
|
``` |
||||||
|
|
||||||
|
## Regex Checking |
||||||
|
|
||||||
|
When converting data, it's important to handle potential errors. |
||||||
|
|
||||||
|
In the following example, we're using a regex pattern to check if the value is an integer. If it is, we'll cast it to an integer. If it's not, we'll return `NULL`. |
||||||
|
|
||||||
|
```sql |
||||||
|
-- Using CASE to handle invalid conversions |
||||||
|
SELECT |
||||||
|
CASE |
||||||
|
-- Checking value against the regex pattern for integers |
||||||
|
WHEN value ~ '^[0-9]+$' THEN CAST(value AS INTEGER) |
||||||
|
ELSE NULL |
||||||
|
END AS safe_integer |
||||||
|
FROM raw_data; |
||||||
|
``` |
||||||
|
|
||||||
|
> **Note**: The `~` operator is used to check if the value matches the regex pattern for integers. This is a PostgreSQL-specific operator. |
||||||
|
|
||||||
|
## Numeric Conversions |
||||||
|
|
||||||
|
When working with numbers in different formats: |
||||||
|
|
||||||
|
```sql |
||||||
|
-- Convert percentage string to decimal |
||||||
|
SELECT CAST(REPLACE('15%', '%', '') AS DECIMAL(5,2)) / 100.0; |
||||||
|
-- Returns: 0.15 |
||||||
|
``` |
||||||
|
|
||||||
|
## Date Conversions |
||||||
|
|
||||||
|
Converting between different date formats: |
||||||
|
|
||||||
|
```sql |
||||||
|
-- Convert string dates to date type |
||||||
|
SELECT |
||||||
|
CAST('2024-03-15' AS DATE) AS standard_date, |
||||||
|
CAST('03/15/2024' AS DATE) AS us_date, |
||||||
|
CAST('15-Mar-2024' AS DATE) AS custom_date; |
||||||
|
|
||||||
|
-- Convert date to different string format |
||||||
|
SELECT TO_CHAR( |
||||||
|
CAST('2024-03-15' AS DATE), |
||||||
|
'Month DD, YYYY' |
||||||
|
) AS formatted_date; |
||||||
|
``` |
||||||
|
|
||||||
|
## Boolean Conversions |
||||||
|
|
||||||
|
Converting various values to boolean: |
||||||
|
|
||||||
|
```sql |
||||||
|
-- Convert strings/numbers to boolean |
||||||
|
SELECT |
||||||
|
CAST('true' AS BOOLEAN), -- Returns: true |
||||||
|
CAST('1' AS BOOLEAN), -- Returns: true |
||||||
|
CAST('false' AS BOOLEAN), -- Returns: false |
||||||
|
CAST('0' AS BOOLEAN); -- Returns: false |
||||||
|
``` |
||||||
|
|
||||||
|
> **Note**: While `CAST` is standard SQL, some databases offer alternative syntax. For example, PostgreSQL supports the `::` operator (`'123'::integer`), and SQL Server supports the `CONVERT` function. The handling of invalid conversions also varies between databases. Always check your database's documentation for specific behavior and best practices. |
||||||
|
|
||||||
|
In the next lesson, we'll explore logical functions for handling conditional operations. |
Loading…
Reference in new issue