我的表格有日期时间列:DateOfDisc
。
我需要编写一个查询,创建动态新列,以该格式显示DateOfDisc
的四分之一:“Q1”,“Q2”,“Q3”,“Q4”,因此:
如果Month(
DateOfDisc
)为1或2或3,则值为Q1
如果 月(DateOfDisc
)是4或5或6,值将是Q2
如果 月份(DateOfDisc
)是7或8或9,值将是Q3
如果 月份(DateOfDisc
)是10或11或12,而值将是Q4
我怎样才能做到这一点?
答案 0 :(得分:3)
您的定义是quarter的标准定义,因此最简单的方法是使用datename()
,因为这会返回一个不是数字的字符串:
SELECT 'Q' + DATENAME(QUARTER, DateOfDisc) as Quarter
如果需要,可以将其设为计算列,以便任何使用该表的人都可以使用
ALTER TABLE t ADD Quarter as ('Q' + DATENAME(QUARTER, DateOfDisc));
答案 1 :(得分:2)
您可以直接使用带有季度选项的DATEPART()功能来获取日期所属的季度
SELECT *, 'Q' + CAST(DATEPART(QUARTER, DateOfDisc) AS VARCHAR(1)) as Quarter
FROM TableName
答案 2 :(得分:2)
你也可以试试这个:
PrintWriter out = resp.getWriter();
resp.setContentType("text/html");
req.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);
exporter = new HtmlExporter();
SimpleHtmlReportConfiguration configuration = new SimpleHtmlReportConfiguration();
configuration.setWrapBreakWord(true);
exporter.setConfiguration(configuration);
exporter.setExporterInput(new SimpleExporterInput(print));
SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(out);
String[] uriParts = req.getRequestURI().split("/");
output.setImageHandler(new WebHtmlResourceHandler("/" + uriParts[1] + "/image?image={0}"));
exporter.setExporterOutput(output);
exporter.exportReport();
答案 3 :(得分:1)
添加计算列,以确保数据始终一致:
var color = worksheet.Cells[1,1,1,5].Style.Font.Color
.LookupColor(worksheet.Cells[1,1,1,5].Style.Font.Color);
答案 4 :(得分:1)
您可以使用DATEPART。见例:
WITH Src AS
(
SELECT DATEADD(MONTH, M, '2016-01-01') SomeDate
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) T(M)
)
SELECT SomeDate, 'Q'+CONVERT(varchar,DATEPART(QUARTER, SomeDate)) [Quarter]
FROM Src
它产生:
SomeDate Quarter
----------------------- -------
2016-01-01 00:00:00.000 Q1
2016-02-01 00:00:00.000 Q1
2016-03-01 00:00:00.000 Q1
2016-04-01 00:00:00.000 Q2
2016-05-01 00:00:00.000 Q2
2016-06-01 00:00:00.000 Q2
2016-07-01 00:00:00.000 Q3
2016-08-01 00:00:00.000 Q3
2016-09-01 00:00:00.000 Q3
2016-10-01 00:00:00.000 Q4
2016-11-01 00:00:00.000 Q4
2016-12-01 00:00:00.000 Q4
答案 5 :(得分:1)
我会建议一个没有大小写的计算列,使用简单的除法。
alter table tablename add quarter as 'Q'||(2+Month(DateOfDisc))/3
如果你的关注是铸造:
alter table tablename add quarter as 'Q'||cast((2+Month(DateOfDisc))/3 as varchar(1))
答案 6 :(得分:0)
假设您具有此收入表,并且想要获得4个季度的收入部门
date | revenue | division
-----------|---------|---------
2018-01-20 | 1500000 | chemo
2019-02-21 | 1200000 | agri
2019-04-09 | 390900 | pharma
CREATE TABLE revn
(
date DATE,
rev INTEGER,
division TEXT
);
INSERT INTO revn (date, rev, division)
VALUES
("2018-01-20", 1500000, "D1"),
("2019-02-21", 1200000, "d2"),
("2019-04-09", 390900, "d3")
("2019-04-09", 390900, "d4");
有一个名为QUARTER(col_name)
,please see the w3school docs的函数,在这种情况下将很方便,如下所示:
SELECT (
SELECT QUARTER(date)
) AS q, rev
FROM revn;
输出应为:
**[Results][2]**:
| q | rev |
|---|---------|
| 1 | 1500000 |
| 1 | 1200000 |
| 2 | 390900 |
| 2 | 390900 |