SQL Server 如何将nvarchar转换为数值

scyqe7ek  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(409)

我有一些带有十进制值的字段,但在数据库中导入为nvarchar(50)数据类型,如下所示:
| 时间|(订购产品销售)|(订购单位)|
| - ------| - ------| - ------|
| 2022年1月1日星期一00:00:00|五十五元六角|四个|
| 2022年1月3日上午00时00分|六百五十二块五四|十三|

    • 目标**:我想聚合(SUM)这些字段,以获得订单总和和订购的总件数

我尝试将这些值转换为numeric(10,2),因为我想聚合这些字段(SUM):

SELECT 
    [Time],
    SUM(CAST([Ordered_product_sales] AS NUMERIC(10, 2))) AS Sales_per_day,
    SUM(CAST([Units_ordered] AS INT)) AS num_of_units_ordered
FROM 
    [dbo].[salesDashboard]
WHERE      
    Ordered_product_sales <> '0.00' 
    AND Ordered_product_sales IS NOT NULL
GROUP BY 
    Time

但是,我收到以下错误:
将数据类型nvarchar转换为numeric时出错。

wlzqhblo

wlzqhblo1#

导致错误的原因是[Ordered_product_sales]列中的数据字符串包含无法转换为numeric数据类型的字符。在执行CAST函数之前,必须首先清理字符串以删除所有无法转换的字符,特别是示例数据中存在的$
这应该行得通:

SELECT 
    [Time]
    ,SUM(CAST(REPLACE([Ordered_product_sales], '$', '') AS NUMERIC(10, 2))) 
     AS Sales_per_day,
    ,SUM(CAST([Units_ordered] AS INT)) AS num_of_units_ordered
FROM [dbo].[salesDashboard]

您应该考虑并努力改进表和列的数据类型设计。

相关问题