select
to_char(时间字段,'yyyy-mm-dd')
from
表名;
这样就取出时间字段中的年月日
,格式为
2010-08-19
既然数据都重复,就时间不同,那就取max(时间)就行了吧 select 重复数据的列名1,重复数据的列名2,,max(时间列) from table group by 重复数据的列名1,重复数据的列名2,
1 你的 create table xxx 语句
2 你的 insert into xxx 语句
3 结果是什么样,(并给以简单的算法描述)
4 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
2 SQL Server 获得当前日期的函数: GETDATE() GETUTCDATE() CURRENT_TIMESTAMP
GETDATE(): 返回当前系统日期和时间
GETUTCDATE(): 使用 DT_DBTIMESTAMP 格式返回以 UTC 时间(通用协调时间或格林尼治标准时间)表示的系统当前日期
CURRENT_TIMESTAMP: 返回当前日期的和时间,等价于GETDATE()函数注此函数不带括号"()"
-----------------------------------------------------------------------------------------------------------------
--- SELECt GETDATE() AS [GETDATE],CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP],GETUTCDATE() AS [GETUTCDATE] ---
--- 返回结果:GETDATE CURRENT_TIMESTAMP GETUTCDATE ---
--- 2008-12-04 18:28:50437 2008-12-04 18:28:50437 2008-12-04 10:28:50437 ---
-----------------------------------------------------------------------------------------------------------------
4 SQL Server 日期的加减函数: DATEDIFF DATEADD
DATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数, 语法:DATEDIFF ( datepart , startdate , enddate ) 用 enddate 减去 startdate
注:datepart 指定应在日期的哪一部分计算差额的参数,其日期相减时,只关注边界值,例SELECT DATEDIFF(YEAR,'2008-12-31','2009-1-1') 返回 1
DATEADD : 返回给指定日期加上一个时间间隔后的新 datetime 值。 语法:DATEADD (datepart , number, date )
注: datepart 指定要返回新值的日期的组成部分
number 使用来增加 datepart 的值。正数表示增加,负数表示减少,如果是小数则忽略小数部分,且不做四舍五入。
这里有个同比和环比的例子。好好研究下就知道了。表结构如下:
ID DepartName(部门) Sales(销售量) SalesDate(销售日期)
1 营销一部 300 2006-7-1
2 营销二部 500 2006-7-1
3 营销三部 800 2006-8-1
4 营销一部 600 2006-8-1
5 营销二部 800 2006-8-1
6 营销一部 400 2007-7-1
7 营销二部 800 2007-7-1
8 营销三部 700 2007-8-1
9 营销一部 600 2008-7-1
10 营销二部 300 2008-7-1
要根据要求得到以下数据
1)选择开始年月,结束年月,得到同比数据
eg开始年月:2006-7 结束:2006-8
获取:
对比年月 DepartName(部门) Sales(销售总量) 上期 差异 差异率
2006-7 营销一部 300 0 300 无穷大
2006-7 营销一部 500 0 500 无穷大
2006-7 营销三部 0 0 0 0
2006-8
(2)选择月份 获取环比数据
eg选择 20087
部门 本月销售总量 去年同期 变动 变动率
营销一部 600 0 0 0
营销二部 300 800 -500 (300-800)/800 Code
1--雇员数据
2CREATE TABLE Employee(
3ID int, --雇员编号(主键)
4Name nvarchar(10), --雇员名称
5Dept nvarchar(10)) --所属部门
6INSERT Employee SELECT 1,N'张三',N'大客户部'
7UNION ALL SELECT 2,N'李四',N'大客户部'
8UNION ALL SELECT 3,N'王五',N'销售一部'
9--费用表
10CREATE TABLE Expenses(
11EmployeeID int, --雇员编号
12Date Datetime, --发生日期
13Expenses nvarchar(10), --指标名称
14[Money] decimal(10,2)) --发生金额
15INSERT Expenses SELECT 1,'2004-01-01',N'销售',100
16UNION ALL SELECT 1,'2004-01-02',N'销售',150
17UNION ALL SELECT 1,'2004-12-01',N'销售',200
18UNION ALL SELECT 1,'2005-01-10',N'销售', 80
19UNION ALL SELECT 1,'2005-01-15',N'销售', 90
20UNION ALL SELECT 1,'2005-01-21',N'成本', 8
21UNION ALL SELECT 2,'2004-12-01',N'成本', 2
22UNION ALL SELECT 2,'2005-01-10',N'销售', 10
23UNION ALL SELECT 2,'2005-01-15',N'销售', 40
24UNION ALL SELECT 2,'2005-01-21',N'成本', 8
25UNION ALL SELECT 3,'2004-01-01',N'销售',200
26UNION ALL SELECT 3,'2004-12-10',N'销售', 80
27UNION ALL SELECT 3,'2005-01-15',N'销售', 90
28UNION ALL SELECT 3,'2005-01-21',N'销售', 8
29GO
30
31--统计
32DECLARE @Period char(6)
33SET @Period='200501' --统计的年月
34
35--统计处理
36DECLARE @Last_Period char(6),@Previous_Period char(6)
37SELECT @Last_Period=CONVERT(char(6),DATEADD(Year,-1,@Period+'01'),112),
38 @Previous_Period=CONVERT(char(6),DATEADD(Month,-1,@Period+'01'),112)
39SELECT Dept,Expenses,Name,
40 C_Money,
41 L_Money,
42 L_UP=C_Money-L_Money,
43 L_Prec=CASE
44 WHEN L_Money=0 THEN '----'
45 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-L_Money) as int)+2,1)
46 +CAST(CAST(ABS(C_Money-L_Money)100/P_Money as decimal(10,2)) as varchar)+'%'
47 END,
48 P_Money,
49 P_UP=C_Money-P_Money,
50 P_Prec=CASE
51 WHEN P_Money=0 THEN '----'
52 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-P_Money) as int)+2,1)
53 +CAST(CAST(ABS(C_Money-P_Money)100/P_Money as decimal(10,2)) as varchar)+'%'
54 END
55FROM(
56 SELECT aDept,bExpenses,
57 Name=CASE WHEN GROUPING(Name)=1 THEN '<合计>' ELSE aName END,
58 C_Money=ISNULL(SUM(CASE CONVERT(char(6),bDate,112) WHEN @Period THEN b[Money] END),0),
59 L_Money=ISNULL(SUM(CASE CONVERT(char(6),bDate,112) WHEN @Last_Period THEN b[Money] END),0),
60 P_Money=ISNULL(SUM(CASE CONVERT(char(6),bDate,112) WHEN @Previous_Period THEN b[Money] END),0)
61 FROM Employee a,Expenses b
62 WHERE aID=bEmployeeID
63 AND CONVERT(char(6),bDate,112) IN(@Last_Period,@Previous_Period,@Period)
64 GROUP BY aDept,bExpenses,aID,aName WITH ROLLUP
65 HAVING (GROUPING(aName)=0 OR GROUPING(aID)=1)
66 AND (GROUPING(aID)=0 OR GROUPING(bExpenses)=0))a
67
68///--结果
69Dept Expenses Name C_Money L_Money L_UP L_Prec P_Money P_UP P_Prec
70------- --------- -------- --------- -------- -------- -------- -------- -------- ------
71大客户部 成本 张三 800 00 800 ---- 00 800 ----
72大客户部 成本 李四 800 00 800 ---- 200 600 ↑30000%
73大客户部 成本 <合计> 1600 00 1600 ---- 200 1400 ↑70000%
74大客户部 销售 张三 17000 25000 -8000 ↓3200% 20000 -3000 ↓1500%
75大客户部 销售 李四 5000 00 5000 ---- 00 5000 ----
76大客户部 销售 <合计> 22000 25000 -3000 ↓1200% 20000 2000 ↑1000%
77销售一部 销售 王五 9800 20000 -10200 ↓5100% 8000 1800 ↑2250%
78销售一部 销售 <合计> 9800 20000 -10200 ↓5100% 8000 1800 ↑2250%
79--/
80
81
82
我来回答吧
如果是sql server数据库
select name from 你的表 where leavetime < getdate()
如果是access数据库
select name from 你的表 where leavetime < now()
如果是mysql数据库
select name from 你的表 where leavetime < now()
以上就是关于如何用sql查询句取字段中年月日来比较系统年月日全部的内容,包括:如何用sql查询句取字段中年月日来比较系统年月日、sql如何取存在时间相近的记录、如何用SQL计算同比等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)