因为这个时候time是datetime类型,left是针对字符串的 *** 作,先把time转换为字符串就可以了
select left(convert(varchar,getdate(),21),7)
思路:先准备好整个时间段的月份,然后关联统计就行了;
--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')
工具/材料:Management Studio。
1、首先在桌面上,点击“Management Studio”图标。
2、之后在该界面中,点击左上角“新建查询”选项。
3、接着在该界面中,输入获取今年的上一年和下一年(去年与明年)的sql语句“select year(getdate())-1 AS "去年" , year(getdate())+1 AS "明年"”。
4、然后在该界面中,点击左上方“执行”按钮。
5、最后在该界面中,显示获取今年的上一年和下一年(去年与明年)成功。
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数据表只有年龄可以使用数据库里的日期处理函数,倒推出生年份。年龄指的是,从出生年月到现在经过了多少年。也就是说,从现在往前推年龄的年数,就得到了出生年份。比如,你现在20岁,可以用如下SQL得出出生的年月:SELECT DATEADD(year, -20, GETDATE)。
年龄:
年龄,指一个人从出生时起到计算时止生存的时间长度,通常用年岁来表示。年龄是一种具有生物学基础的自然标志,一个人出生以后,随着日月流逝,年龄也随之增长,这是不可抗拒的自然规律。人在进行自身再生产的同时,也进行着年龄的再生产,它总是由不同年代出生的不同年龄的个人所组成。都与每个人的年龄密切相关。所以,正确计算年龄具有十分重要的意义。
alter table employee
add constraint date1_1(约束名) check (year(Date_hired)-year(Birthday)>=18)
以上就是关于sql 日期分别提取年月全部的内容,包括:sql 日期分别提取年月、sql 从日期中提取年份,按年份求和、oracle的sql 如何获取今年的上一年和下一年(去年与明年)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)