【问题标题】:T-SQL field parsingT-SQL 字段解析
【发布时间】:2010-10-19 17:17:35
【问题描述】:

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

谢谢, 史蒂文

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

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

    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 
    

    马特·汉密尔顿问,

    为什么您选择使用 substring(field, 1, 1) 而不是简单的 left(field, 1)?我注意到@jms 在另一个答案中也这样做了。

    我知道substring 是在 ANSI-92 中指定的;我不知道left 是。无论如何,left 不是原始的,因为它可以写成substring,所以使用substring 似乎更干净一些。

    【讨论】:

    • 您为什么选择使用 substring(field, 1, 1) 而不是简单的 left(field, 1)?我注意到@jms 在另一个答案中也这样做了。
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多