在语句中转换结果

时间:2010-07-28 13:13:38

标签: sql sql-server

假设我有以下简单查询

SELECT TOP 1 name FROM months

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

[update]更正了查询。在编写这个简单示例时,我将其与MySQL [/ update]

混合在一起

7 个答案:

答案 0 :(得分:3)

如果您只想要月份编号,可以这样做:

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

答案 1 :(得分:3)

如果您想根据一组固定的输出值映射一组固定的输入值,CASE WHEN是您的朋友:

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

答案 2 :(得分:2)

如果您真的使用SQL服务器,可以尝试以下

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

但正如其他人所说,您使用LIMIT关键字表示您可能在另一个RDBMS上

答案 3 :(得分:1)

在Oracle中我们使用DECODE。但我认为在SQL Server中你必须使用CASE。例如:

SELECT CASE WHEN name = 'March' THEN '3' 
            WHEN name = 'April' THEN '4' 
            ELSE 'something else' 
       END
FROM months

答案 4 :(得分:1)

只是为了变化

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

答案 5 :(得分:1)

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

select TOP 1 datepart(month,convert(datetime, left(name,3) + ' 01, 01', 107))
FROM months

答案 6 :(得分:0)

我认为你能做的最好的就是CASE声明。

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