SQL返回数字而不是几个月

时间:2018-06-16 09:45:16

标签: sql

我想知道你是否可以帮我解决这个问题。 我被要求(在数据库内)返回6月和8月的月份但不是字母而是数字,如下图所示,6月应为06等等。我知道这段代码是不正确的,如果你能以正确的方式指导我真的很感谢你的帮助。谢谢

CREATE TABLE dbo.Departments
    (
        First_Name        NVARCHAR(20) NOT NULL,
        Last_Name         NVARCHAR(20) NOT NULL,
        Job_Description   VARCHAR(30)  NULL,
        Department_Name   VARCHAR(30)  NOT NULL,
        Department_Number INT          NOT NULL,
        Date_Hired        DATE         NOT NULL,
    );

INSERT INTO dbo.Departments(First_Name,Last_Name,Job_Description,Department_Name,Department_Number,Date_Hired)
VALUES
('Niel','Matthews','Sales Representative','Marketing',80,'1990-06-12'),
('Jerome','Daniels','Sales Representative','Accounting',60,'1973-03-30'),
('Caleb','Sewcharran','Employee','Accounting',35,'1986-08-10'),
('Orion','Wolf','Employee','Marketing',80,'1987-10-04'),
('Gaige','Johnson','Employee','Accounting',60,'1992-09-22'),
('Maya','Heller','Employee','Marketing',25,'1989-06-17'),
('James','Maroon','Employee','Accounting',30,'2011-08-22'),
('Alex','Mercer','Employee','Accounting',60,'2010-03-17'),
('Adam','Beecher','Sales Representative','Marketing',80,'2012-10-04'),
('Bruce','Wayne','Employee','Marketing',25,'2012-08-12'),
('Al','Kepler','Sales Representative','Accounting',80,'1973-06-30');

SELECT First_Name,Last_Name,
(SELECT Date_Hired,
(SELECT CASE
    WHEN Date_Hired=06
    THEN 'June'
    WHEN Date_Hired=08
    THEN 'August'
    END))
    FROM dbo.Departments 
ORDER BY Last_Name;
  

(错误讯息)   消息206,级别16,状态2,第179行   操作数类型冲突:日期与tinyint不兼容   信息116,第16级,状态1,第187行   当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式   (你也可以向我解释为什么会发生这条消息)

2 个答案:

答案 0 :(得分:1)

如果您想选择按名称编号的月份,请查看此代码,这样可以让您走上正确的轨道。

我无法为您提供准确的SQL,因为您在问题中说明您知道SQL不正确。

SELECT 
MONTH([yourdatefieldName]) AS [Month Number], 
DATENAME(MM, [yourdatefieldName]) AS [Month Name]
FROM myTable
WHERE yourclauseshere

------------------编辑--------------------------- < / p>

既然您已经编辑了问题,那么更好的SQL代码块就是这样的。

SELECT
First_Name,
Last_Name,
Date_Hired,
DATENAME(MM, Date_Hired) AS [Month]
FROM
dbo.Departments
WHERE DATENAME(MM, Date_Hired) IN ('June', 'August')

不要将其作为案例陈述,而是最好在where子句中使用它。

显然有其他方法可以做到这一点,但这就是我如何以你需要的方式做到这一点。

答案 1 :(得分:1)

您没有指定使用的,而是使用dbo和错误消息。如果确实如此,你可以使用format而不是重新发明轮子:

SELECT   First_Name, Last_Name, FORMAT(Date_Hired, 'MM')
FROM     dbo.Departments 
ORDER BY Last_Name

修改:
要回答评论中的问题,您也可以在where子句中使用这样的函数调用:

SELECT   First_Name, Last_Name, FORMAT(Date_Hired, 'MM')
FROM     dbo.Departments 
WHERE    FORMAT(Date_Hired, 'MM') = '06'
ORDER BY Last_Name