【问题标题】:Converting Varchar to decimal将 Varchar 转换为十进制
【发布时间】:2014-04-10 16:30:44
【问题描述】:

我有两个字段将数据保存为 varchar

field1= 10,000.00 和 field2= 5,000.00

我现在需要添加这两个字段来查找 sum 。但是当我添加为 Field1+Field2 时

结果是 10,000.005,000.oo

我尝试使用 CAST(Field1 as decimal(12,2)) 但它会抛出一个错误,它无法将 varchar 转换为数字。

帮帮我!

                        SELECT     [1] AS ContractPriceExcluded, [2] AS Anticipated, [3] AS Approved, [4] AS claims, [5] AS ProvisionalSums, [6] AS CommitmentsToDate, [7] AS AnticipatedFCost, 
                  [8] AS VarianceToContract, [9] AS CertifiedPayments,[10] AS ContractPriceIncluded , [11] AS ProvisionalSumsNotactivated ,description, status, ReferenceNo
                    FROM         (SELECT     ISNULL([Workflow_CustomFormfields].[fieldnumber], '') AS fieldnumber, 
                                         CAST( REPLACE([Workflow_CustomFormFields].fieldvalue,',','')as Decimal(12,2))  AS fieldvalue, isnull(workflow_customforms.subject, '') AS description, 
                                          isnull(workflow_customforms.categoryvalue, '') AS status, isnull(workflow_customforms.reference, '') AS ReferenceNo
                   FROM          [dbo].[Workflow_CustomFormfields] INNER JOIN
                                          dbo.Workflow_CustomForms ON [dbo].[Workflow_CustomForms].[Id] = dbo.Workflow_CustomFormfields.customformId
                   WHERE      dbo.Workflow_CustomForms.ProjectId = 1 AND dbo.Workflow_CustomForms.CustomformtypeId = 75) PS PIVOT (max(fieldvalue) FOR fieldnumber IN ([1], [2], 
                  [3], [4], [5], [6], [7], [8], [9],[10],[11])) AS pivot_fieldvalue

【问题讨论】:

  • 你为什么不首先将它存储为十进制?

标签: sql sql-server sql-server-2008


【解决方案1】:
 select cast(replace('10,000.00',',','') as decimal(12,2))

问题在于逗号

【讨论】:

  • 您好,这个解决方案效果很好。但是当我在 case 语句中使用它时,它会抛出同样的错误。检查下面我使用的 case 语句。
  • (CASE WHEN [workflow_customformfields].FieldType = 'Date' THEN dbo.CustomForm_GetDate(workflow_customformfields.fieldvalue) WHEN [workflow_customformfields].FieldType = 'Double' THEN CAST(REPLACE(Workflow_CustomFormFields.fieldvalue,', ','') as Decimal(12,2)) ELSE isnull(workflow_customformfields.fieldvalue, '') END) AS fieldvalue
  • 在运行上面的代码时,它会抛出我遇到的同样的错误。无法将 varchar 转换为数字。
  • 您正试图将 3 种不同的类型放在一列中。 CustomForm_GetDate() - 我认为返回 Date, CAST(REPLACE(Workflow_CustomFormFields.fieldvalue,',','') as Decimal(12,2)) - 返回 Decimal 和 isnull(workflow_customformfields.fieldvalue, '') 将返回varchar
  • 在上面的问题(已编辑)下面检查我的完整代码。我什至删除了 case 语句,但错误仍然存​​在。 @MikkaRin
【解决方案2】:

您是否将两个值都转换为十进制?这很好用

DECLARE @one varchar(8), @two varchar(8)
SET @one = '10,000.00'
SET @two = '5,000.00'
SELECT CAST(replace(@one,',','') AS decimal(12,2))+
       CAST(replace(@two,',','') AS decimal(12,2))

【讨论】:

  • 请看仔细提问。
【解决方案3】:

您必须删除逗号并转换为十进制。见下文。

declare @field1 varchar(50) = '10,000.00' ,
 @field2 varchar(50)= '5,000.00'

select Convert(decimal(10,2),replace(@field1,',','')) +Convert(decimal(10,2),replace(@field2,',',''))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多