sql - 为什么不是一列中的所有值都没有转换
问题描述
我已将 csv 文件插入到 sql server 并现在进行投射。有一列包含(166742.9659)之类的值作为nvarchar,我想将其转换为十进制。我的查询是这样的
CAST([amount] AS decimal(18,2)) AS [amount]
我收到以下消息:
将数据类型 nvarchar 转换为数值时出错
然后我尝试查询只是为了查看哪些值 aws 未转换
TRY_CAST([amount] AS decimal(18,2)) AS [amount]
然后我得到了 NULL 值的数量。当我在原始 csv 文件中检查这些值时,我发现这些数字与已成功转换的值具有相同的格式。例如:这个号码17011343.12被成功转换这个号码**166742.9659**得到空值
所以有没有人可以理解发生了什么?
解决方案
这表明字符串中有意外字符。这需要调试。所以这是为了帮助你。
您需要对查询进行一些取证。一个起点是:
select amount, len(amount), len(ltrim(rtrim(amount)))
from staging
where TRY_CAST([amount] AS decimal(18,2)) is null and
amount is not null;
您将需要手动计算字符以查看长度是否与您看到的相符。如果是这样,则表明其中一个数字实际上是其他数字(例如 aO
或l
-- 大写 O 或小写 l)。或者小数位可能是其他句号。
如果它们不匹配,则恶意的其他字符已进入您的文件。
推荐阅读
- python-3.x - 试图从 OptionMenu 中选择选项以使用 tkinter 在嵌套字典中获取多个字典值
- php - MySQL DB 查询抛出错误,说我有语法错误。好像找不到他们?我相信它在查询的列部分
- pyspark - 如何在不使用 StandardScaler 的情况下标准化 PySpark 中的列?
- azure - Azure 数据工厂映射值的一部分
- python - 如何使用 PyCharm Remote Deployment 开发多个包?
- ruby-on-rails - 使用 rspec 测试茧
- html - 使用 CSS 未将 HTML 项目定位在右侧
- javascript - 角度6面包屑不起作用
- ios - SKVideoNode 停止播放 SKAudioNode
- unit-testing - 有没有办法在本地和/或在 CI/CD 中测试 AppSync 代码?