sql - SQL Server:将数据类型 nvarchar 转换为十进制时出错
问题描述
以下代码将打开一条 JSON 消息,并在post_metric_score
表上的 JSON 消息中插入与“$.disgust”字段对应的值。它通常工作正常,除非值是这样的:
"disgust": 5.6780936574796215e-05.
我得到的错误是
将数据类型 nvarchar 转换为十进制时出错
INSERT INTO [Database].[post_metric_score] ([post_id], [metric_id], [score])
SELECT @post_id, 4, [score]
FROM OPENJSON(@postJson, '$.sentiment_results.emotions')
WITH ([score] DECIMAL(12, 8) '$.disgust')
我试图在 SELECT 语句中添加一个转换语句,但它不起作用,例如
SELECT @post_id, 6, CONVERT(DECIMAL(12,8), [score]) AS [score]
关于我做错了什么的任何想法?
解决方案
尝试将值作为字符串检索并使用try_convert()
:
INSERT INTO [Database].[post_metric_score]([post_id], [metric_id], [score])
SELECT @post_id, 4, try_convert(decimal(12, 8), try_convert(float, [score]))
FROM OPENJSON(@postJson, '$.sentiment_results.emotions')
WITH ([score] VARCHAR(255) '$.disgust') ;
或者直接使用浮点数:
INSERT INTO [Database].[post_metric_score]([post_id], [metric_id], [score])
SELECT @post_id, 4, try_convert(decimal(12, 8), try_convert(float, [score]))
FROM OPENJSON(@postJson, '$.sentiment_results.emotions')
WITH ([score] float '$.disgust') ;
推荐阅读
- firebase - FirebaseAuth:没有为“EmailAuthProvider”类型定义方法“getCredential”
- html - 如何使用选择选项更改 iframe src?
- java - 如何使用 spring-data/jpa 忽略“重复条目”异常
- typo3 - 如何学习TYPO3扩展编程?
- javascript - 更新状态并在点击时获取数据(使用状态挂钩)
- javascript - 使用 JavaScript 映射键值对
- c++ - pmr::vector 比 std::vector 慢
- java - JDK 1.5 中的代码构建,但运行时使用 1.8,是否存在性能问题?
- docker - 如何在容器内从一个域“重定向”到另一个域?
- python - Pandas 的 Airflow 并行任务