sql server - Strange CAST behaviour with INT and a single hyphen ( - ) -
i answered question: concate primary keys in sql
there encountered strange behaviour:
select 5 + '-' + 8
returns 13
select cast('-' int)
returns 0, explains above...
but: why single hyphen casted 0 implictly?
btw: it's same single + or (multi-)blank string...
this related cast hyphen (-) decimal points fact, cast decimal not bring these results...
i'm writing answer because it's long/complex comment - it's based off comments. note - not have official source, no confirmation logic "what's implemented". (but makes sense think :))
but suppose you're writing conversion function, needs perform.
so have string validate - example cast('-50' int);
take each character on own:
`-` valid part of conversion, move next character. `5` valid part of conversion, move next character. `0` valid part of conversion, move next character. done.
so supposed string cast('-' int);
:
`-` valid part of conversion, move next character. done.
now - additional check invalidate because -
not allowed standalone, require additional code.
similar +
, spaces. same currency , money or period , money:
select cast('$' money) select cast('.' money)
both valid characters - in actuality in connection actual numbers well. parse through - indicating it's intentional, , speed conversion seems sensible.
Comments
Post a Comment