sql server:将数据类型nvarchar转换为十进制时出错

w7t8yxp5  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(389)

下面的代码打开了一条json消息,并插入了与 post_metric_score table。一般来说,它可以正常工作,除非值如下:

"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语句中添加convert语句,但它不起作用。

SELECT @post_id, 6, CONVERT(DECIMAL(12,8), [score]) AS [score]

你知道我做错了什么吗?

oxcyiej7

oxcyiej71#

尝试以字符串形式检索值并使用 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') ;

相关问题