我想知道你是否可以帮我解决这个问题。 我被要求(在数据库内)返回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引入子查询时,只能在选择列表中指定一个表达式 (你也可以向我解释为什么会发生这条消息)
答案 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)
您没有指定使用的rdbms,而是使用dbo
和错误消息sql-server。如果确实如此,你可以使用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