Chuyển đổi dữ liệu với nhiều kiểu

Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Miriam Antona

Software Engineer

Giới thiệu về kiểu dữ liệu không mong muốn

SELECT * FROM series
WHERE rating BETWEEN 0 AND 10
SELECT * FROM series
WHERE rating >= 0 AND rating <= 10
| id  | name            | rating | ... |
|-----|-----------------|--------|-----|
| 1   | Adventure Time  | 8.4    | ... |
| 2   | Dexter          | 8.6    | ... |
| 3   | Futurama        | 9.2    | ... |
| 4   | Game of Thrones | 9.3    | ... |
| ... | ...             | ...    | ... |
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Giới thiệu về kiểu dữ liệu không mong muốn

SELECT * FROM series
WHERE rating BETWEEN 0 AND 10
SELECT * FROM series
WHERE rating >= 0 AND rating <= 10
| id  | name            | rating | ... |
|-----|-----------------|--------|-----|
| 1   | Adventure Time  | 8.4    | ... |
| 2   | Dexter          | 8.6    | ... |
| 3   | Futurama        | 9.2    | ... |
| 4   | Game of Thrones | 9.3    | ... |
| ... | ...             | ...    | ... |
Column_name Type
id int
name varchar
premiered date
official_site varchar
contact_number varchar
rating float
summary varchar
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Giới thiệu về kiểu dữ liệu không mong muốn

Column_name Type
id int
name varchar
premiered date
official_site varchar
contact_number varchar
rating varchar
summary varchar
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Kiểu dữ liệu không mong muốn - ví dụ

SELECT * FROM series
WHERE rating BETWEEN 0 AND 10
SELECT * FROM series
WHERE rating >= 0 AND rating <= 10
Chuyển đổi thất bại khi chuyển giá trị varchar '8.4' sang kiểu dữ liệu int.
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Kiểu dữ liệu không mong muốn - ví dụ

SELECT AVG(rating)
FROM series
Kiểu dữ liệu operand varchar không hợp lệ cho toán tử avg.
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Giải quyết vấn đề chuyển đổi kiểu

SELECT * FROM series
WHERE CAST(rating AS FLOAT) BETWEEN 0 AND 10
SELECT * FROM series
WHERE CONVERT(FLOAT, rating) BETWEEN 0 AND 10
| id  | name            | premiered  | contact_number | rating | ... |
|-----|-----------------|------------|----------------|--------|-----|
| 1   | Adventure Time  | 2010-04-05 | 555-906-8845   | 8.4    | ... |
| 2   | Dexter          | 2006-01-10 | 555-156-8845   | 8.6    | ... |
| 3   | Futurama        | 1999-03-28 | 555-210-9951   | 9.2    | ... |
| 4   | Game of Thrones | 2011-04-17 | 555-543-6641   | 9.3    | ... |
| ... | ...             | ...        | ...            | ...    | ... |
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Giải quyết vấn đề chuyển đổi kiểu

SELECT AVG(CAST(rating AS FLOAT)) AS rating_casted
FROM series
WHERE CAST(rating AS FLOAT) BETWEEN 0 AND 10
SELECT AVG(CONVERT(FLOAT, rating)) AS rating_casted
FROM series
WHERE CONVERT(FLOAT, rating) BETWEEN 0 AND 10
| rating_casted    |
|------------------|
| 8,62857142857143 |
Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Ayo berlatih!

Làm sạch dữ liệu trong cơ sở dữ liệu SQL Server

Preparing Video For Download...