我刚刚回答了这个问题:在SQL中连接主键
在那里,我遇到了一种奇怪的行为:
SELECT 5 + '-' + 8
返回13
SELECT CAST('-' AS INT)
返回0,解释了上面的内容...
但是:为什么单个连字符会隐式转换为零?
顺便说一句:一个或多个(或多个)空白字符串是相同的...
这与CAST连字号(-)与小数相关,但指向一个事实,即强制转换为小数不会显示这些结果...
我将其写为答案,因为它太长/太复杂,无法发表评论-但这是基于我的评论。另请注意-我没有官方资源,因此无法确认我的逻辑是“实现了什么”。(但是我认为这是有道理的:))
但是,假设您正在编写需要执行的转换函数。
因此,您有一个要验证的字符串-例如,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] 删除。
我来说两句