SQL: NUMERIC AND CONVERSION FUNCTIONS
Master quantitative computation and type safety: rounding with ROUND, CEIL, and FLOOR, mathematical functions ABS, MOD, POWER, and SQRT, pseudo-random generation, ANSI CAST vs CONVERT, type coercion, and number formatting.
Overview of SQL Numeric and Conversion Functions
Quantitative calculations drive commercial database workloads, from financial accounting and inventory management to predictive analytics. SQL provides rich mathematical functions to perform arithmetic rounding, calculate statistical variances, and manage data types.
Equally important are Type Conversion Functions, which ensure values conform to expected data types when performing calculations, comparisons, and exports.
Data Types and Numeric Precision
- Exact Numerics (INT, DECIMAL, NUMERIC):Store exact values without rounding drift; mandatory for financial transactions and monetary currencies.
- Approximate Numerics (FLOAT, REAL):Store scientific quantities with binary floating-point representation; faster for geometric and scientific workloads but prone to tiny rounding variations.
- Integer Division Trap:Dividing an integer by another integer in engines like SQL Server or SQLite (5 / 2) returns an integer (2); cast to float (5.0 / 2) to obtain decimals (2.5).
ROUND, CEIL / CEILING, FLOOR
Rounding functions adjust decimal numbers to specific integer or fractional precision:
- ROUND(number, [decimals]): Rounds to the nearest value. If decimals is omitted, rounds to 0 decimal places.
- CEIL(number) / CEILING(number): Rounds upward to the smallest integer greater than or equal to the number.
- FLOOR(number): Rounds downward to the largest integer less than or equal to the number.
| Input Value | ROUND(val, 0) | CEIL(val) | FLOOR(val) |
|---|---|---|---|
| 4.2 | 4 | 5 | 4 |
| 4.8 | 5 | 5 | 4 |
| -4.2 | -4 | -4 | -5 |
| -4.8 | -5 | -4 | -5 |
Rounding, Ceil, and Floor Operations
SQLEvaluate numerical rounding behaviors across positive decimal price fields
Negative Rounding Decimal Arguments
- Rounding to Tens and Hundreds:Passing a negative decimal precision rounds digits to the left of the decimal point: ROUND(1234.56, -2) rounds to the nearest hundred (1200).
- Negative Number Direction:FLOOR(-4.2) yields -5 because it moves down toward negative infinity; CEIL(-4.2) yields -4 moving toward zero.
ABS, MOD, POWER, SQRT
SQL provides standard mathematical functions for algebraic calculations:
- ABS(number): Returns the absolute (non-negative) magnitude of a number.
- MOD(dividend, divisor) or %: Returns the remainder of division.
- POWER(base, exponent): Raises a base number to the specified power.
- SQRT(number): Computes the square root of a non-negative number.
Mathematical Functions: ABS, MOD, POWER, SQRT
SQLExecute absolute variances, remainder operations, and exponential projections
Mathematical Domain Rules
- SQRT Domain Error:Passing a negative number into SQRT() raises an invalid domain error or returns NaN (Not a Number).
- Modulo Even/Odd Pattern:WHERE (id % 2) = 0 isolates even records; WHERE (id % 2) = 1 isolates odd records, ideal for parallel batch workers.
RANDOM / RAND
Generating pseudo-random values is useful for data sampling, randomizing question banks, and assigning randomly distributed test groups:
- SQLite:
RANDOM()returns a signed 64-bit integer between -9,223,372,036,854,775,808 and +9,223,372,036,854,775,807. - PostgreSQL:
RANDOM()returns a floating-point number between 0.0 and 1.0. - MySQL / SQL Server:
RAND()returns a float between 0.0 and 1.0.
Generating Random Numbers
SQLProduce random integers and bounded fractional numbers in SQLite
Random Row Selection Performance Warning
- ORDER BY RANDOM() Cost:Writing SELECT * FROM table ORDER BY RANDOM() LIMIT 5 forces the database to generate random numbers and sort the entire table in memory, which is slow on millions of rows.
- Large Table Alternative:On massive tables, generate a random ID key filter or use TABLESAMPLE (supported in SQL Server and Postgres).
CAST Function
The CAST function is the official ANSI SQL standard mechanism for explicitly converting an expression from one data type to another:
Because it is part of the SQL standard, CAST is supported across all major database engines (PostgreSQL, SQLite, MySQL, SQL Server, and Oracle).
Explicit Type Conversion with CAST
SQLTransform numbers, strings, and decimals safely using standard CAST
Truncation vs Rounding in Type Casting
- Integer Truncation:Casting a decimal to an integer via CAST(19.99 AS INT) truncates the decimal portion, resulting in 19, not 20. If rounding is required, call ROUND() first.
- Integer Division Prevention:To prevent integer truncation during division, cast either operand to floating point: CAST(wins AS FLOAT) / total_games.
CONVERT Function
CONVERT is a vendor-specific conversion function primarily found in Microsoft SQL Server and MySQL.
In Microsoft SQL Server, CONVERT is particularly popular because it accepts an optional third argument called a style code that formats dates, times, and financial amounts into regional standards:
CONVERT(data_type, expression, [style_code])
CONVERT(VARCHAR(10), GETDATE(), 120) -- Formats as ISO 'YYYY-MM-DD'
In MySQL, the argument sequence is reversed:
CONVERT(expression, data_type)
Error Tolerant Conversion: TRY_CONVERT / TRY_CAST
- Conversion Failures:In SQL Server, attempting CAST('abc' AS INT) aborts the query with an error.
- TRY_CAST and TRY_CONVERT:SQL Server and Snowflake provide TRY_CAST and TRY_CONVERT, which safely return NULL when conversion fails instead of crashing the query.
CAST vs CONVERT
Choosing between CAST and CONVERT is a fundamental design decision when writing SQL scripts.
| Evaluation Criteria | CAST | CONVERT |
|---|---|---|
| Standardization | Official ANSI SQL Standard | Vendor-specific (SQL Server, MySQL) |
| Cross-Platform Portability | Runs across Postgres, SQLite, MySQL, SQL Server, Oracle | Fails on PostgreSQL, SQLite, and Oracle |
| Date/Time Style Codes | No style code support | Supports explicit numeric style codes in SQL Server |
| Best Practice Recommendation | Preferred default for general type casting | Use in SQL Server when specific format styles are needed |
Architectural Selection Rule
- Default to CAST:Always use CAST() as your default choice. It ensures your queries port cleanly between different databases without rewrites.
Implicit vs Explicit Type Conversion
Relational databases handle conversions in two ways:
- Implicit Conversion: The database engine automatically coerces data types behind the scenes to complete an operation (for example, evaluating
'100' + 20as120). - Explicit Conversion: The developer deliberately declares the transformation using
CAST()orCONVERT().
Implicit vs Explicit Type Coercion
SQLContrast automatic database type coercion with explicit CAST declarations
The Performance Trap of Implicit Conversion
- SARGability Loss:If phone_number is VARCHAR, writing WHERE phone_number = 123456 forces the database to cast every phone_number column in the table to an integer before comparing, bypassing B-Tree indexes.
- Data Type Precedence:Because integers take precedence over strings, the database converts the column rather than the constant, causing full table scans.
Formatting Numbers
When preparing numerical data for executive reports, user interfaces, or export files, raw numbers need currency signs, thousand-separator commas, and fixed decimal places.
- SQLite:
PRINTF('$%.2f', price)formats floating-point values with fixed decimal places. - PostgreSQL / Oracle:
TO_CHAR(price, '$FM999,999.00'). - MySQL:
FORMAT(price, 2)adds thousand-separator commas and 2 decimals. - SQL Server:
FORMAT(price, 'C', 'en-US')formats as currency according to regional culture codes.
Formatting Numbers and Currencies
SQLFormat raw numeric numbers into currency strings and fixed-decimal outputs
Database vs Frontend Formatting
- Keep Data Raw for Calculation:Formatted numbers become strings ($45.00), preventing further mathematical operations or aggregation.
- Best Practice:Keep numbers numeric in core relational views and format them in the final presentation layer or frontend application.
Knowledge Check: SQL Numeric & Conversion Functions
1. What does the FLOOR(-4.2) function return in standard SQL?
2. Which type conversion function is the official ANSI SQL standard?
3. What value is returned by the expression CAST(19.99 AS INT)?
4. Why is implicit type conversion dangerous in WHERE clauses?
5. Which built-in function generates pseudo-random numbers in SQLite?
6. What does the ABS() function compute on a numeric value?