1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
--------------------
-- Explicit casts --
--------------------
$strs = AsList("-1", "0", "1", "2.4", "99.77", "999.5", "-7777");
$data = ListMap($strs, ($str) -> { return AsStruct($str as str); });
SELECT
dataset.*,
-- Changing range
CAST(dec_3_1 AS Decimal(5, 1)) AS upcast_3_1,
CAST(dec_5_2 AS Decimal(4, 2)) AS downcast_5_2,
-- Changing precision
CAST(dec_5_2 AS Decimal(3, 0)) AS rounded_5_2,
CAST(dec_7_0 AS Decimal(9, 2)) AS extended_7_0,
-- Combinations
CAST(dec_5_2 AS Decimal(6, 0)) AS upcast_rounded_5_2,
CAST(dec_3_1 AS Decimal(7, 3)) AS upcast_extended_3_1,
CAST(dec_5_2 AS Decimal(3, 1)) AS downcast_rounded_5_2,
CAST(dec_7_0 AS Decimal(5, 2)) AS downcast_extended_7_0
FROM (
SELECT
str AS a_str,
CAST(str AS Decimal(3, 1)) AS dec_3_1,
CAST(str AS Decimal(5, 2)) AS dec_5_2,
CAST(str AS Decimal(7, 0)) AS dec_7_0
FROM AS_TABLE($data)
) as dataset;
--------------------
-- Implicit cast --
--------------------
$lambda = ($big_dec) -> { return $big_dec; };
$func = Callable(Callable<(Decimal(10, 5))->Decimal(10, 5)>, $lambda);
$small_dec = Decimal("3.0", 2, 1);
SELECT $func($small_dec);
|