如何用sql查询句取字段中年月日来比较系统年月日

如何用sql查询句取字段中年月日来比较系统年月日,第1张

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计算同比等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9719411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存