代码之家  ›  专栏  ›  技术社区  ›  Nick

转换语句内的结果

  •  6
  • Nick  · 技术社区  · 14 年前

    假设我有以下简单的查询

    SELECT TOP 1 name FROM months
    

    返回name=“march”。是否可以转换这个结果?我想要name=“3”,而不是“march”。SQL能够做这样的事情吗?我使用的是MSSQL数据库。

    7 回复  |  直到 14 年前
        1
  •  3
  •   Tomalak    14 年前

    如果要将一组固定的输入值映射到一组固定的输出值, CASE WHEN 是你的朋友:

    SELECT
      CASE name
        WHEN 'january'  THEN 1
        WHEN 'february' THEN 2
        WHEN 'march'    THEN 3
        /* ... */
      END as num
    FROM
      months
    
        2
  •  3
  •   dcp    14 年前

    SELECT
       CASE
          WHEN name = 'January' then 1
          WHEN name = 'February' then 2
          WHEN name = 'March' then 3
          WHEN name = 'April' then 4
          WHEN name = 'May' then 5
          WHEN name = 'June' then 6
          WHEN name = 'July' then 7
          WHEN name = 'August' then 8
          WHEN name = 'September' then 9
          WHEN name = 'October' then 10
          WHEN name = 'November' then 11
          WHEN name = 'December' then 12
       END month_num
    FROM months
    
        3
  •  2
  •   Ed Harper    14 年前

    如果您真的在使用SQLServer,可以尝试以下方法

    SELECT TOP 1 MONTH(CAST('01 ' + name + ' 2000' AS DATETIME))
    FROM months
    

    但正如其他人所说,你对 LIMIT 关键字表明您可能在另一个RDBMS上

        4
  •  1
  •   hol    14 年前

    在甲骨文中我们使用解码。但我认为在sqlserver中,您必须使用CASE。例子:

    SELECT CASE WHEN name = 'March' THEN '3' 
                WHEN name = 'April' THEN '4' 
                ELSE 'something else' 
           END
    FROM months
    
        5
  •  1
  •   user359040 user359040    14 年前

    尝试使用SQLServer的日期转换函数,如下所示:

    select TOP 1 datepart(month,convert(datetime, left(name,3) + ' 01, 01', 107))
    FROM months
    
        6
  •  1
  •   Martin Smith    14 年前

    SELECT 
    CEILING(CHARINDEX(name,'January   February  March     April     May       June      July      August    September October   November  December'
    COLLATE sql_latin1_general_cp1_ci_as )/10.0) 
     month_num
     FROM months
    
        7
  •  0
  •   Joe Stefanelli    14 年前

    我想你能做的最好的就是一个案例陈述。

    select case name
               when 'January' then 1
               when 'February' then 2
               ...
               when 'December' then 12
           end as MonthNumber
       from months