代码之家  ›  专栏  ›  技术社区  ›  Steven Behnke

T-SQL字段解析

  •  0
  • Steven Behnke  · 技术社区  · 15 年前

    在第三方数据库中有一个字段,我需要为正在编写的报告分组。该字段可以包含几种不同类型的数据。首先,它可以包含一个3位数的数字。我需要把它们分成101到200和201到300等组。除此之外,该字段还可以在前面加上一个特定的字母,如M或K,然后加上几个数字。它被定义为VARCHAR(8),对于如何处理以特定字母开头或在数字范围内的这两种情况,我将不胜感激。如果我能把它写成一个案例陈述,并根据数值或第一个字母返回一个部门,那将是最好的,这样我就可以在我的报告中分组。

    谢谢 史蒂文

    2 回复  |  直到 15 年前
        1
  •  1
  •   tpdi    15 年前

    如果我能把它写成一个案例陈述,并根据数值或第一个字母返回一个部门,那将是最好的,这样我就可以在我的报告中分组。

    case when substring( field, 1, 1 ) = 'M' then ...
    when substring( field, 1, 1 ) = 'K" then ...
    else floor( (cast( field as int) - 1 ) / 100) end 
    
    
       select ....
       group by 
        case when substring( field, 1, 1 ) = 'M' then ...
        when substring( field, 1, 1 ) = 'K" then ...
        else floor( (cast( field as int) - 1 ) / 100) end 
    

    马特·汉密尔顿问道,

    您选择使用子字符串(字段1,1)而不是简单地使用左(字段1)的原因是什么?在另一个答案中,我注意到@jms也这样做了。

    我知道 substring ANSI-92中有规定;我不知道 left 左边 子串 ,所以使用 子串

        2
  •  0
  •   jason saldo    15 年前
    select
    CASE  (CASE WHEN substring(field,1,1) between 0 and 9 then 'N' Else 'C' END)
    WHEN 'N' THEN
        CASE field
            WHEN ... THEN ...
            WHEN ... THEN ...
        END
    WHEN 'C' THEN
        CASE field
            WHEN ... THEN ...
            WHEN ... THEN ...
        END
    END