Back to Materialize

CAST function and operator

doc/user/content/sql/functions/cast.md

12314.8 KB
Original Source

The cast function and operator return a value converted to the specified type.

Signatures

{{% include-syntax file="examples/sql_functions/cast" example="syntax-function" %}}

{{% include-syntax file="examples/sql_functions/cast" example="syntax-operator" %}}

The following special syntax is permitted if val is a string literal:

{{% include-syntax file="examples/sql_functions/cast" example="syntax-literal" %}}

Return value

cast returns the value with the type specified by the type parameter.

Details

Valid casts

Cast context defines when casts may occur.

Cast contextDefinitionStrictness
ImplicitValues are automatically converted. For example, when you add int4 to int8, the int4 value is automatically converted to int8.Least
AssignmentValues of one type are converted automatically when inserted into a column of a different type.Medium
ExplicitYou must invoke CAST deliberately.Most

Casts allowed in less strict contexts are also allowed in stricter contexts. That is, implicit casts also occur by assignment, and both implicit casts and casts by assignment can be explicitly invoked.

Source typeReturn typeCast context
array<sup>1</sup>textAssignment
bigintboolExplicit
bigintintAssignment
bigintfloatImplicit
bigintnumericImplicit
bigintrealImplicit
biginttextAssignment
bigintuint2Assignment
bigintuint4Assignment
bigintuint8Assignment
boolintExplicit
booltextAssignment
byteatextAssignment
datetextAssignment
datetimestampImplicit
datetimestamptzImplicit
floatbigintAssignment
floatintAssignment
floatnumeric<sup>2</sup>Assignment
floatrealAssignment
floattextAssignment
floatuint2Assignment
floatuint4Assignment
floatuint8Assignment
intbigintImplicit
intboolExplicit
intfloatImplicit
intnumericImplicit
intoidImplicit
intrealImplicit
inttextAssignment
intuint2Assignment
intuint4Assignment
intuint8Assignment
intervaltextAssignment
intervaltimeAssignment
jsonbbigintExplicit
jsonbfloatExplicit
jsonbintExplicit
jsonbrealExplicit
jsonbnumericExplicit
jsonbtextAssignment
list<sup>1</sup>listImplicit
list<sup>1</sup>textAssignment
maptextAssignment
mz_aclitemtextExplicit
numericbigintAssignment
numericfloatImplicit
numericintAssignment
numericrealImplicit
numerictextAssignment
numericuint2Assignment
numericuint4Assignment
numericuint8Assignment
oidintAssignment
oidtextExplicit
realbigintAssignment
realfloatImplicit
realintAssignment
realnumericAssignment
realtextAssignment
realuint2Assignment
realuint4Assignment
realuint8Assignment
recordtextAssignment
smallintbigintImplicit
smallintfloatImplicit
smallintintImplicit
smallintnumericImplicit
smallintoidImplicit
smallintrealImplicit
smallinttextAssignment
smallintuint2Assignment
smallintuint4Assignment
smallintuint8Assignment
textbigintExplicit
textboolExplicit
textbyteaExplicit
textdateExplicit
textfloatExplicit
textintExplicit
textintervalExplicit
textjsonbExplicit
textlistExplicit
textmapExplicit
textnumericExplicit
textoidExplicit
textrealExplicit
texttimeExplicit
texttimestampExplicit
texttimestamptzExplicit
textuint2Explicit
textuint4Assignment
textuint8Assignment
textuuidExplicit
timeintervalImplicit
timetextAssignment
timestampdateAssignment
timestamptextAssignment
timestamptimestamptzImplicit
timestamptzdateAssignment
timestamptztextAssignment
timestamptztimestampAssignment
uint2bigintImplicit
uint2floatImplicit
uint2intImplicit
uint2numericImplicit
uint2realImplicit
uint2textAssignment
uint2uint4Implicit
uint2uint8Implicit
uint4bigintImplicit
uint4floatImplicit
uint4intAssignment
uint4numericImplicit
uint4realImplicit
uint4textAssignment
uint4uint2Assignment
uint4uint8Implicit
uint8bigintAssignment
uint8floatImplicit
uint8intAssignment
uint8realImplicit
uint8uint2Assignment
uint8uint4Assignment
uuidtextAssignment

<sup>1</sup> Arrays and lists are composite types subject to special constraints. See their respective type documentation for details.

<sup>2</sup> Casting a float to a numeric can yield an imprecise result due to the floating point arithmetic involved in the conversion.

Examples

mzsql
SELECT INT '4';
nofmt
 ?column?
----------
         4
<hr>
mzsql
SELECT CAST (CAST (100.21 AS numeric(10, 2)) AS float) AS dec_to_float;
nofmt
 dec_to_float
--------------
       100.21
<hr/>
mzsql
SELECT 100.21::numeric(10, 2)::float AS dec_to_float;
nofmt
 dec_to_float
--------------
       100.21