查找在SQL Server的特定[月]中未晋升的员工

时间:2018-07-18 07:27:35

标签: sql sql-server

我有一个名为tblemployees的表,在该表中,我想要一个在特定月份未晋升的员工的输出。

Create table tblEmployees
(
     Id int Identity Primary key,
     Name nvarchar(40),
     PromotedMonth int
)

----------------------------
| Id | Name | PromotedMonth |
|----|------|---------------|
| 1  | Mark |     03        |
| 2  | Mary |     12        |
-----------------------------

我想要这样的输出:

----------------------------
| Id | Name | PromotedMonth |
|----|------|---------------|
| 1  | Mark |     March     |
| 2  | Mary |     December  |
-----------------------------

每次我使用DatName函数时,它总是返回1月为[PromotedMonth]

那我该怎么办?

如何确定在特定月份升职的员工?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用DATENAME功能。

TestDDL

CREATE TABLE T(
  ID INT,
  NAME VARCHAR(10),
  PromotedMonth INT
);

INSERT INTO T VALUES (1,'T',3);
INSERT INTO T VALUES (2,'T1',12);

查询

SELECT id,
       name,
       DATENAME(month, DATEADD(month, PromotedMonth -1 , CAST('1900-01-01' AS datetime))) AS 'PromotedMonth'
FROM T

结果

| id | name | PromotedMonth |
|----|------|---------------|
|  1 |    T |         March |
|  2 |   T1 |      December |

sqlfiddle:http://sqlfiddle.com/#!18/69b30/3

答案 1 :(得分:0)

使用datename()函数获取月份名称:

select *, datename(month, dateadd(mm, PromotedMonth-1, 0)) 
from tblEmployees e;

无需使用cast()进行日期时间对话。只需使用0作为未指定的日期组件即可设置默认日期1900-01-01