今天我想知道为什么这些简单的sql语句返回错误而不是成功执行:
GO
SELECT CAST('1,234.00' AS DECIMAL(22,2))
GO
SELECT CONVERT(DECIMAL(22,2), '1,234.00')
如果我删除千位分隔符,我发现脚本执行成功。
GO
SELECT CAST('1234.00' AS DECIMAL(22,2))
GO
SELECT CONVERT(DECIMAL(22,2), '1234.00')
所以问题是为什么 sql server 不接受千位分隔符作为输入?
此外,我发现相同的逻辑在 C# 中成功执行。
static void Main(string[] args)
{
string s = "1,234.00";
Console.WriteLine(decimal.Parse(s)); // result 1234.00
}
为什么他们对铸造对象有不同的政策?我已经在 C# 中验证了字符串,并且验证效果很好。但是,当我将字符串加载到 sql server 中时,我得到了错误。