假设我有以下简单查询
SELECT TOP 1 name FROM months
返回name =“march”。可以转换这个结果吗?而不是“游行”我想要name =“3”。 SQL能做这样的事吗?我正在使用MSSQL数据库。
[update]更正了查询。在编写这个简单示例时,我将其与MySQL [/ update]
混合在一起答案 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