Is there a standard way for how the following statements evaluate, or is it implementation-defined?
SELECT CAST(100000 AS int16); # integer overflow
SELECT CAST("hello" AS VARCHAR(2)); # string overflow (truncation?)
For example, should the number get the max 16-bit value? Raise an error (and if so, why?) Should the string just chop off the first two chars? etc.
select cast(100000 as smallint) ...is expected to raise a numeric value out range exception. (smallintis ANSI/ISO SQL data type, which I'd consider database agnostic.)select cast('hello' as varchar(2)) ...will give you'he'.Note that character data truncation is treated differently depending on if you read/select, or write/insert.
select 'hello' into :chr2 ..., where chr2 is a 2 character target, will give'he', and a string data truncation warning.Bit if you try to INSERT the value
'hello'into a varchar(2) column, you will get truncation error, and no value is inserted.