
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%Y/%m ');
+----------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%Y/%m ') |
+----------------------------------------------+
| 1997/10 |
+----------------------------------------------+
思路:先准备好整个时间段的月份,然后关联统计就行了;
--mssql:WITH TMP AS
(SELECT '1994-1-1' AS BEGAN_DATE, '1994-12-1' AS END_DATE, 10000 AS JS,
120000 AS ZJS
UNION ALL
SELECT '1995-1-1', '1995-5-1', 10000, 50000
UNION ALL
SELECT '1995-6-1', '1998-3-1', 10000, 3400000
)
,TMP1 AS (SELECT DATEADD(MONTH, TNUMBER, T1BEGAN_DATE) AS T_MONTH
FROM MASTER SPT_VALUES T,
(SELECT MIN(BEGAN_DATE) AS BEGAN_DATE,
DATEDIFF(MONTH, MIN(BEGAN_DATE), MAX(END_DATE)) AS T_MONTH
FROM TMP) T1
WHERE TNUMBER <= T1T_MONTH AND
TTYPE = 'P')
SELECT DATENAME(YEAR, T1T_MONTH) AS YEARS, SUM(TJS) AS ZJS
FROM TMP T
INNER JOIN TMP1 T1
ON T1T_MONTH >= CAST(TBEGAN_DATE AS DATE) AND
T1T_MONTH <= CAST(TEND_DATE AS DATE)
GROUP BY DATENAME(YEAR, T1T_MONTH), TBEGAN_DATE
ORDER BY DATENAME(YEAR, T1T_MONTH);
--oracle :
WITH TMP AS
(SELECT '1994-1-1' AS BEGAN_DATE, '1994-12-1' AS END_DATE, 10000 AS JS,
120000 AS ZJS
FROM DUAL
UNION ALL
SELECT '1995-1-1', '1995-5-1', 10000, 50000
FROM DUAL
UNION ALL
SELECT '1995-6-1', '1998-3-1', 10000, 3400000
FROM DUAL),
TMP1 AS
(SELECT ADD_MONTHS(BEGAN_DATE, LEVEL - 1) T_MONTH
FROM (SELECT TO_DATE(MIN(BEGAN_DATE), 'YYYY-MM-DD') BEGAN_DATE,
TO_DATE(MAX(END_DATE), 'YYYY-MM-DD') END_DATE
FROM TMP)
CONNECT BY LEVEL <= MONTHS_BETWEEN(END_DATE, BEGAN_DATE) + 1)
SELECT TO_CHAR(T_MONTH, 'YYYY') AS YEARS, SUM(TJS) AS ZJS
FROM TMP T
INNER JOIN TMP1 T1
ON T1T_MONTH >= TO_DATE(TBEGAN_DATE, 'YYYY-MM-DD') AND
T1T_MONTH <= TO_DATE(TEND_DATE, 'YYYY-MM-DD')
GROUP BY TO_CHAR(T_MONTH, 'YYYY'), TBEGAN_DATE
ORDER BY TO_CHAR(T_MONTH, 'YYYY')
GETDATE() 函数从 SQL Server 返回当前的时间和日期。
使用下面的 SELECT 语句:
SELECT GETDATE() AS CurrentDateTime
结果:
CurrentDateTime
2008-12-29 16:25:46635
注释:上面的时间部分精确到毫秒。
例子 2
下面的 SQL 创建带有日期时间列 (OrderDate) 的 "Orders" 表:
CREATE TABLE Orders
(
OrderId int NOT NULL PRIMARY KEY,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT GETDATE()
)
请注意,OrderDate 把 GETDATE() 规定为默认值。结果是,当您在表中插入新行时,当前日期和时间自动插入列中。
现在,我们希望在 "Orders" 表中插入一条记录:
INSERT INTO Orders (ProductName) VALUES ('Computer')
"Orders" 表将成为这样:
OrderId ProductName OrderDate
1 'Computer' 2008-12-29 16:25:46635
以上就是关于sql如何获取一列日期的年份和月份全部的内容,包括:sql如何获取一列日期的年份和月份、sql 从日期中提取年份,按年份求和、sql如何读取系统日期和时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)