08/04/2001
In the realm of data management and analysis, the ability to precisely manipulate and convert data types is paramount. Whether you're preparing data for reporting, performing calculations, or ensuring data integrity, understanding how to switch between numeric formats is a fundamental skill. This article will delve into the essential techniques for converting decimal (floating-point) numbers into whole integers within SQL, a common requirement for many database operations. We'll explore the primary tool for this task, the CAST() function, and provide practical examples to illustrate its usage.

Understanding Data Type Conversion in SQL
SQL, the standard language for relational databases, offers robust capabilities for managing data. One of these capabilities is data type conversion, often referred to as casting. The CAST() function is a standard SQL function that allows you to convert an expression from one data type to another. This is incredibly useful when you need to ensure compatibility between different data fields, perform specific types of calculations, or simply present data in a more appropriate format.
The CAST() Function: Your Primary Tool
The syntax of the CAST() function is straightforward:
SELECT CAST( expression AS type );- expression: This is the value or column you wish to convert.
- type: This specifies the target data type you want to convert the expression to. The available types can vary slightly depending on the specific Database Management System (DBMS) you are using, but common ones include
BINARY,CHAR,DATE,DATETIME,TIME, and various numeric types likeINTEGER,DECIMAL,FLOAT, etc.
Converting Decimals to Integers
A frequent task is to convert a number with decimal places (a floating-point or decimal type) into a whole number (an integer). The CAST() function handles this by truncating (cutting off) the decimal part. It does not round the number; it simply discards everything after the decimal point.
Example Scenario: Customer Budgets
Let's consider a hypothetical `customers` table with the following structure:
| id | prenom | nom | date_ajout | budget |
|---|---|---|---|---|
| 1 | Thierry | Jourdain | 2013-02-05 14:11:09 | 314.21 |
| 2 | Laurette | Bertin | 2013-03-15 15:06:45 | 154.34 |
| 3 | André | Moreira | 2013-08-26 08:24:39 | 255.47 |
| 4 | Aurélie | Moulin | 2013-09-04 11:36:17 | 147.95 |
In this table, the budget column is likely stored as a FLOAT or DECIMAL type, containing values with decimal places.
SQL Query to Convert Budget to Integer
To extract just the whole number part of the budget, we can use CAST():
SELECT id, prenom, nom, date_ajout, CAST(budget AS SIGNED INTEGER) AS budget_integer FROM customers; Explanation:
CAST(budget AS SIGNED INTEGER): This part instructs the database to take the value from thebudgetcolumn and convert it into a signed integer. The term 'signed' indicates that the number can be positive or negative. Some database systems might use different integer type names, such asINT,INTEGER, orBIGINT.AS budget_integer: This assigns an alias to the converted column, making the output clearer.
Result of the Query
The output of the above query would look like this:
| id | prenom | nom | date_ajout | budget_integer |
|---|---|---|---|---|
| 1 | Thierry | Jourdain | 2013-02-05 14:11:09 | 314 |
| 2 | Laurette | Bertin | 2013-03-15 15:06:45 | 154 |
| 3 | André | Moreira | 2013-08-26 08:24:39 | 255 |
| 4 | Aurélie | Moulin | 2013-09-04 11:36:17 | 147 |
Notice how the decimal parts (.21, .34, .47, .95) have been removed, leaving only the whole numbers.

Converting Integers to Decimals (Floating-Point Numbers)
Conversely, you might need to convert an integer into a decimal or floating-point number. This is useful when you need to perform division or other operations that require decimal precision.
SQL Query to Convert to Float
If you had an integer column, say `quantity_sold`, and wanted to treat it as a decimal for a calculation, you could do:
SELECT product_name, CAST(quantity_sold AS FLOAT) AS quantity_float FROM sales; This would convert integer values like 5 into 5.0 (or a similar representation depending on the exact float type).
Important Considerations and Variations
Rounding vs. Truncation
It's crucial to remember that CAST(), when converting from a decimal to an integer, typically truncates the decimal part. It does not round the number to the nearest integer. If you need rounding, you would typically use a different function, such as ROUND().
For example:
-- Truncates 3.7 to 3 SELECT CAST(3.7 AS INTEGER); -- Rounds 3.7 to 4 SELECT ROUND(3.7); Database-Specific Syntax
While CAST() is a standard, the exact names for data types can differ between database systems (e.g., MySQL, PostgreSQL, SQL Server, Oracle). For instance, as noted in the provided information, MySQL often requires specifying whether an integer should be SIGNED or UNSIGNED. Always consult the documentation for your specific DBMS.

- MySQL:
CAST(expression AS SIGNED INTEGER)orCAST(expression AS UNSIGNED INTEGER), or simplyCAST(expression AS INT). - PostgreSQL:
CAST(expression AS INTEGER)orexpression::integer(shorthand). - SQL Server:
CAST(expression AS INT)orCONVERT(INT, expression). - Oracle:
CAST(expression AS NUMBER)orTRUNC(expression)for truncation.
Other Conversion Functions
Some databases offer alternative functions for conversion, like CONVERT() in SQL Server or shorthand casting operators (e.g., :: in PostgreSQL). While CAST() is generally preferred for its standard compliance, understanding these alternatives can be beneficial.
Implicit Conversion
It's also worth noting that databases sometimes perform implicit conversions. For example, if you try to add an integer to a float, the integer might be automatically converted to a float before the addition. However, relying on implicit conversion can sometimes lead to unexpected results or performance issues, so explicit conversion using CAST() is often the safer and clearer approach.
Why Convert Numbers?
There are several reasons why you might need to convert numeric data types:
- Data Aggregation: When calculating averages or sums, you might want to ensure all numbers are in a compatible format.
- Reporting: Presenting data without unnecessary decimal places can make reports cleaner and easier to read.
- Calculations: Certain mathematical operations might require specific numeric types. For instance, some integer-only algorithms might be applied.
- Storage Efficiency: In some rare cases, storing data as integers might save a minuscule amount of space compared to floating-point types, although this is usually a minor consideration.
- Joining Tables: Ensuring that columns used in JOIN conditions have compatible data types is crucial for performance and correctness.
Common Pitfalls
- Data Loss: Converting a larger data type to a smaller one (e.g., a very large float to a small integer) can lead to data loss or overflow errors.
- Truncation vs. Rounding: Forgetting that CAST() truncates and expecting rounding can lead to incorrect results.
- Database Incompatibility: Using syntax specific to one DBMS in another can cause errors.
Conclusion
The CAST() function is an indispensable tool in SQL for managing and transforming numeric data. By understanding how to convert decimal numbers to integers and vice versa, you gain greater control over your data, enabling more accurate calculations and clearer presentations. Always remember to consider the specific requirements of your data and the nuances of your particular database system when performing these conversions.
Frequently Asked Questions (FAQ)
Q1: Does CAST() round the decimal numbers?
A1: No, CAST() typically truncates the decimal part, meaning it simply removes the digits after the decimal point without rounding.

Q2: What happens if the decimal number is very large?
A2: If the decimal number is too large to fit into the target integer type, you may encounter an overflow error, resulting in data loss or an incorrect value.
Q3: Can I convert a float to a decimal with a specific number of decimal places?
A3: Yes, you can use CAST(expression AS DECIMAL(p, s)) or CAST(expression AS NUMERIC(p, s)), where 'p' is the total number of digits and 's' is the number of digits after the decimal point. For example, CAST(123.456 AS DECIMAL(5, 2)) would result in 123.46 (note that rounding may occur here depending on the specific implementation).
Q4: Is there an alternative to CAST() for converting numbers?
A4: Yes, many database systems offer alternative functions like CONVERT() (SQL Server) or shorthand casting operators (e.g., :: in PostgreSQL). However, CAST() is the SQL standard.
Q5: How do I handle the decimal part if I need to round instead of truncate?
A5: You should use the ROUND() function instead of CAST(). For example, SELECT ROUND(budget) FROM customers; would round the budget to the nearest whole number.
If you want to read more articles similar to Mastering Numeric Conversions in SQL, you can visit the Automotive category.
