跟日期有关的两条经典SQL语句

2016-02-19 16:21 4 1 收藏

今天图老师小编要跟大家分享跟日期有关的两条经典SQL语句,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

1.用一条语句得出某日期所在月份的最大天数?

  SELECT DAY(DATEADD(dd, -DAY('2004-02-13'), DATEADD(mm, 1, '2004-02-13'))) AS 'Day Number'

  2.少记录变成多条记录问题

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  有表tbl
  日期       收入    支出
  2004-02-11 00:00:00 60 45
  2004-03-01 00:00:00 60 45
  2004-03-02 00:00:00 40 50
  2004-03-05 00:00:00 50 40


  
    /*
  测试数据:
  Create Table tbl([日期] smalldatetime,[收入] int ,[支出] int)

  Insert Into tbl
  SELECT '2004-02-11', 60, 45
  union SELECT '2004-03-01',60, 45
  union SELECT '2004-03-02',40, 50
  union SELECT '2004-03-05',50, 40
  */

  要得到的结果:
  日期       收入    支出     余额
  2004-02-01 00:00:00 NULL NULL NULL
  2004-02-02 00:00:00 NULL NULL NULL
  2004-02-03 00:00:00 NULL NULL NULL
  2004-02-04 00:00:00 NULL NULL NULL
  2004-02-05 00:00:00 NULL NULL NULL
  2004-02-06 00:00:00 NULL NULL NULL
  2004-02-07 00:00:00 NULL NULL NULL
  2004-02-08 00:00:00 NULL NULL NULL
  2004-02-09 00:00:00 NULL NULL NULL
  2004-02-10 00:00:00 NULL NULL NULL
  2004-02-11 00:00:00 60 45 15
  2004-02-12 00:00:00 NULL NULL 15
  2004-02-13 00:00:00 NULL NULL 15
  2004-02-14 00:00:00 NULL NULL 15
  2004-02-15 00:00:00 NULL NULL 15
  2004-02-16 00:00:00 NULL NULL 15
  2004-02-17 00:00:00 NULL NULL 15
  2004-02-18 00:00:00 NULL NULL 15
  2004-02-19 00:00:00 NULL NULL 15
  2004-02-20 00:00:00 NULL NULL 15
  2004-02-21 00:00:00 NULL NULL 15
  2004-02-22 00:00:00 NULL NULL 15
  2004-02-23 00:00:00 NULL NULL 15
  2004-02-24 00:00:00 NULL NULL 15
  2004-02-25 00:00:00 NULL NULL 15
  2004-02-26 00:00:00 NULL NULL 15
  2004-02-27 00:00:00 NULL NULL 15
  2004-02-28 00:00:00 NULL NULL 15
  2004-02-29 00:00:00 NULL NULL 15
  2004-03-01 00:00:00 60 45 30
  2004-03-02 00:00:00 40 50 20
  2004-03-03 00:00:00 NULL NULL 20
  2004-03-04 00:00:00 NULL NULL 20
  2004-03-05 00:00:00 50 40 30
  2004-03-06 00:00:00 NULL NULL 30
  2004-03-07 00:00:00 NULL NULL 30
  2004-03-08 00:00:00 NULL NULL 30
  2004-03-09 00:00:00 NULL NULL 30
  2004-03-10 00:00:00 NULL NULL 30
  2004-03-11 00:00:00 NULL NULL 30
  2004-03-12 00:00:00 NULL NULL 30
  2004-03-13 00:00:00 NULL NULL 30
  2004-03-14 00:00:00 NULL NULL 30
  2004-03-15 00:00:00 NULL NULL 30
  2004-03-16 00:00:00 NULL NULL 30
  2004-03-17 00:00:00 NULL NULL 30
  2004-03-18 00:00:00 NULL NULL 30
  2004-03-19 00:00:00 NULL NULL 30
  2004-03-20 00:00:00 NULL NULL 30
  2004-03-21 00:00:00 NULL NULL 30
  2004-03-22 00:00:00 NULL NULL 30
  2004-03-23 00:00:00 NULL NULL 30
  2004-03-24 00:00:00 NULL NULL 30
  2004-03-25 00:00:00 NULL NULL 30
  2004-03-26 00:00:00 NULL NULL 30
  2004-03-27 00:00:00 NULL NULL 30
  2004-03-28 00:00:00 NULL NULL 30
  2004-03-29 00:00:00 NULL NULL 30
  2004-03-30 00:00:00 NULL NULL 30
  2004-03-31 00:00:00 NULL NULL 30

  

  答案:
  
    SELECT Y.[日期], tbl.[收入], tbl.[支出], (
  SELECT SUM(ISNULL(tbl.[收入], 0)-ISNULL(tbl.[支出], 0)) FROM tbl WHERE [日期]=Y.[日期]) AS [余额]
  FROM tbl RIGHT JOIN (
  SELECT DATEADD(dd, N.i, DATEADD(dd, 1-DAY(m.MinDay), m.MinDay)) AS [日期]
  FROM (
  SELECT 0 AS i
  

  
    UNION ALL SELECT 1
  UNION ALL SELECT 2
  UNION ALL SELECT 3
  UNION ALL SELECT 4
  UNION ALL SELECT 5
  UNION ALL SELECT 6
  UNION ALL SELECT 7
  UNION ALL SELECT 8
  UNION ALL SELECT 9
  UNION ALL SELECT 10
  UNION ALL SELECT 11
  UNION ALL SELECT 12
  UNION ALL SELECT 13
  UNION ALL SELECT 14
  UNION ALL SELECT 15
  UNION ALL SELECT 16
  UNION ALL SELECT 17
  UNION ALL SELECT 18
  UNION ALL SELECT 19
  UNION ALL SELECT 20
  UNION ALL SELECT 21
  UNION ALL SELECT 22
  UNION ALL SELECT 23
  UNION ALL SELECT 24
  UNION ALL SELECT 25
  UNION ALL SELECT 26
  UNION ALL SELECT 27
  UNION ALL SELECT 28
  UNION ALL SELECT 29
  UNION ALL SELECT 30
  UNION ALL SELECT 31
  ) N,
  (
  SELECT MIN(日期) AS MinDay
  FROM tbl
  GROUP BY DATEDIFF(month, 0, 日期)
  ) M
  WHERE DATEDIFF(mm, DATEADD(dd, N.i, DATEADD(dd, 1-DAY(m.MinDay), m.MinDay)), M.MinDay)=0) AS Y
  ON tbl.[日期]=Y.日期
  

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1611822.html

延伸阅读
喜新厌旧是人的本能 一脚踏两船的女人不是坏女人,而是不满意你的女人。女人与男人不同,男人有多个伴侣,是因为逢场作戏,贪多贪鲜玩刺激;而女人出外多找一个男友,多是她对婚内感情不满意,或是她想证明自己的魅力到底“还有多大”。 女人的不忠,来自女人的忠心。女人的心愿是跟定一个男人,然后好好对待他,让他带给她幸福。...
掌握sql四条最基本的数据操作语句:insert,select,update和delete。 练掌握sql是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句sql的核心功能来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通sql了。 在我们开始之前,先使用create table语句来创建一...
1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 2.数据库加密: select encrypt('原始密码') select pwdencrypt('原始密码') select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码') select pwdencrypt('原始密码') select pwdcompare('原始密...
说明:复制表(只复制结构,源表名:a 新表名:b) select * into b from a where 11 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) insert into b(a, b, c) select d,e,f from b; 说明:显示文章、提交人和最后回复时间 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title...
SQL的意思是结构化查询语言,其主要功能是同各种数据库建立联系,进行沟通.查询指的是对存储于SQL的数据的请求。查询要完成的任务是:将 Select 语句的结果集提供给用户。Select 语句从 SQL 中检索出数据,然后以一个或多个结果集的形式将其返回给用户。  ======================================================...

经验教程

234

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部