我下载了一个与股票市场相关的数据库,其中的值以varchar(50)数据类型表示,我想将它们转换为货币,以便可以对它们执行操作。
遗憾的是,我无法通过以下命令或设计选项执行此操作。
ALTER TABLE dbo.NASDAQ100
ALTER COLUMN High money;
我能怎么办呢?
Cannot convert a char value to money. The char value has incorrect syntax.
我下载了一个与股票市场相关的数据库,其中的值以varchar(50)数据类型表示,我想将它们转换为货币,以便可以对它们执行操作。
遗憾的是,我无法通过以下命令或设计选项执行此操作。
ALTER TABLE dbo.NASDAQ100
ALTER COLUMN High money;
我能怎么办呢?
Cannot convert a char value to money. The char value has incorrect syntax.
1条答案
按热度按时间ou6hu8tu1#
在这里,您所能做的就是确定哪些值不会转换为MONEY数据类型,然后进行任何需要进行的调整来修复它们。
例如,我将创建一个包含一些虚拟数据的表,并将[low]和[high]列的数据类型设置为VARCHAR(50):
简单的
SELECT * FROM dbo.NASDAQ100
查询会传回下列结果:如你所见,数据很脏。
如果我现在尝试将[low]和[high]列的数据类型更改为MONEY:
我得到一个
Cannot convert a char value to money. The char value has incorrect syntax
错误。如前所述,解决此问题的唯一真实的方法是确定哪些值需要更正,然后自己手动更正它们。
下面的查询--它使用TRY_CAST内置函数--应该识别出哪些值不会成功地转换为MONEY数据类型:
对示例数据运行此查询,得到以下结果:
现在,虽然脏值已经被识别出来,但是没有办法确定它们应该是什么,这就是你需要做一些跑腿的工作并查找它们的地方。
获得正确的值后,运行一些UPDATE语句进行更正:
现在,一个简单的
SELECT * FROM dbo.NASDAQ100
查询将返回干净的数据:如果我再次运行查询来识别脏数据(即
WITH cte_Nasdaq100 AS...
),它将不会返回任何结果。现在,我可以将[low]和[high]列的数据类型更改为MONEY,而SQL Server不会显示伪数据:
为了进行测试,我运行了一个查询,结果中包含一个计算:
结果如下:
希望这对你有帮助。