【问题标题】:Find Employees who are not promoted in a specific [Month] in SQL Server在 SQL Server 中查找在特定 [月] 内未晋升的员工
【发布时间】:2018-07-18 07:27:35
【问题描述】:

我有一个名为 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函数时,它总是以[PromotedMonth]返回一月

那我该怎么做呢?

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

【问题讨论】:

  • 什么数据库? @MANISH KISHORE
  • "特定月份未升职的员工", "如何确定特定月份升职的员工?"。我很困惑。

标签: sql sql-server


【解决方案1】:

你可以尝试使用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

【讨论】:

  • 没问题,如果对你有帮助,你可以标记这个答案
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多