带有INT和单个连字符(-)的奇怪CAST行为

Shnugo

我刚刚回答了这个问题:在SQL中连接主键

在那里,我遇到了一种奇怪的行为:

SELECT 5 + '-' +  8 

返回13

SELECT CAST('-' AS INT) 

返回0,解释了上面的内容...

但是:为什么单个连字符会隐式转换为零?

顺便说一句:一个或多个(或多个)空白字符串是相同的...

这与CAST连字号(-)与小数相关,但指向一个事实,即强制转换为小数不会显示这些结果...

艾伦·汉森(Allan S.Hansen)

我将其写为答案,因为它太长/太复杂,无法发表评论-但这是基于我的评论。另请注意-我没有官方资源,因此无法确认我的逻辑是“实现了什么”。(但是我认为这是有道理的:))

但是,假设您正在编写需要执行的转换函数。

因此,您有一个要验证的字符串-例如,CAST('-50' AS INT);
然后将每个字符单独使用:

`-` is a valid part of the conversion, so move to next character.  
`5` is a valid part of the conversion, so move to next character.  
`0` is a valid part of the conversion, so move to next character.  
Done.

所以应该是字符串CAST('-' AS INT);

`-` is a valid part of the conversion, so move to next character.  
Done.

现在-您可以进行额外的检查以使无效,因为-不允许将其独立,但这将需要其他代码。

+和空格相似以及与货币,MONEY或期间和货币相同的情况:

SELECT CAST('$' AS MONEY)
SELECT CAST('.' AS MONEY)

两者都是有效字符-但实际上也仅与实际数字相关。但是他们会解析-表示这都是故意的,并且转换速度似乎很明智。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有INT和单个连字符(-)的奇怪CAST行为

来自分类Dev

int to char cast,奇怪的行为

来自分类Dev

带有LayoutParams的奇怪行为

来自分类Dev

||奇怪的Ruby行为 和 &&

来自分类Dev

加入和的奇怪行为

来自分类Dev

OpenXml 和奇怪的行为

来自分类Dev

带有sudo --stdin的zsh奇怪行为和带有随机字符的密码

来自分类Dev

const_cast的奇怪行为

来自分类Dev

带有子字符串的奇怪行为

来自分类Dev

数组到JSON编码带有希伯来字符的奇怪行为

来自分类Dev

奇怪的Konsole字符编码行为

来自分类Dev

带有NSubstitute的LINQPad中的奇怪行为

来自分类Dev

带有Python文件的奇怪IDE行为

来自分类Dev

带有MVC Razor语法的奇怪行为

来自分类Dev

带有字典的Swift奇怪的'=='行为

来自分类Dev

Protobuf带有枚举的奇怪行为

来自分类Dev

带有sympy潜艇的奇怪行为

来自分类Dev

带有特殊字符的单词边界 `\b` 和 `\B` 的奇怪行为

来自分类Dev

DateTime和DateTimeZone的奇怪行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

时区和SimpleDateFormat奇怪的行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

查找和du的奇怪行为

来自分类Dev

systimestamp和sysdate的奇怪行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

strpos和Ø的奇怪行为

来自分类Dev

奇怪的printf和scanf行为

来自分类Dev

gluPerspective和gluLookAt的奇怪行为