gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:35:12 25 4
gpt4 key购买 nike

我刚刚回答了这个问题:Concate Primary Keys in SQL

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

SELECT 5 + '-' +  8 

返回 13

SELECT CAST('-' AS INT) 

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

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

顺便说一句:这与单个 + 或(多个)空白字符串相同...

这是相关的CAST hyphen (-) to Decimal但指出了一个事实,即转换为十进制不会产生这些结果......

最佳答案

我写这个作为答案是因为它对于评论来说太长/太复杂 - 但它是基于我的评论。另请注意 - 我没有官方消息来源,因此无法确认我的逻辑是“已实现的内容”。 (但我认为这是有道理的:))

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

因此您有一个要验证的字符串 - 例如 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.

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

+和空格类似。与货币和金钱或期间和金钱相同:

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

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

关于sql-server - 带有 INT 和单个连字符 (-) 的奇怪 CAST 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38329343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com