SQL乘法 - 更新查询

时间:2011-09-07 15:03:25

标签: sql-server sql-server-2008

SQL 2008 - 简单查询逻辑。

在我的表:TableName中,我有3列[出货量],尺寸,数量。

Qty的默认值为NULL。我写了一个更新查询来更新列:数量。我需要乘以[Ship Qty] * Size。

列:大小为nvarchar。它带有两个条件

1)如果值为60 EA或3 ML,我只需要考虑60或3或3.5 ......

2)如果值为60X3 ML,我需要考虑60X3,即180.然后,这个乘积值将乘以[Ship Qty]。

update [TableName]
set Qty = [Ship Qty] * CONVERT(INT, (Size)) * CONVERT(Float, (Size))     
           WHERE  Size > 0         
           AND Size > 0         
           AND Qty IS NULL


Ship Qty    Size             Qty
1           100 EA           100
3           60 EA            180
2           60X3ML           360

在上表中,Column:Qty通过SQL Query更新。我的查询抛出异常。

2 个答案:

答案 0 :(得分:1)

你有几个问题:

  • 第一:在我看来你的乘法可能会返回一个浮点数而你的QTY列看起来像是一个整数
  • 第二个(绝对是一个问题):您正在将Size列转换为float,其中包含字符串。您希望如何工作?
  • 第三:为什么示例数据中有两个QTY列?你引用的船舶数量列在哪里?

答案 1 :(得分:1)

糟糕/奇怪的设计,但希望一次性修复;

;with TEST ([Ship Qty], Size) as (
    select 1,'100 EA' union all
    select 3,'60 EA'  union all
    select 2,'60X3ML' union all
    select 2,'60X2ML' union all
    select 2,'60'     union all
    select 2,'1 X3PP'
)
select 
    [Ship Qty],
    Size,
    [Ship Qty] * (
            cast(substring(Size, 1, patindex('%[^0-9]%', Size + '/') - 1) as int)
            *
            case when charindex('X', Size, 1) > 0 then
                cast(substring(substring(Size, charindex('X', Size) + 1, len(Size)), 1, patindex('%[^0-9]%', substring(Size, charindex('X', Size) + 1, len(Size)) + '/') - 1) as int)
            else 
                1
            end
        )
from TEST

有关

Ship Qty    Size    (No column name)
1           100 EA  100
3           60 EA   180
2           60X3ML  360
2           60X2ML  240
2           60      120
2           1 X3PP  6