`
lijun87
  • 浏览: 267815 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

sql语句中的日期处理

阅读更多
一.日期處理函數
1.日期增減函數
dateadd(datepart,number,dtae)
datepart:是規定應向日期的哪一部分返回新值的參數。下列是sql server支持的日期部分\縮寫及含義。
日期部分     縮寫                   含義
year       yy,yyyy                年份
quarter                 qq,q       季度
month                  mm,m       月份
dayofyear              dy,y       日
day                      dd,d                   
week                    wk,ww     星期
hour                     hh        小時
minute                  mi,n                   分鐘
second                 ss,s       秒
millisecond             ms       毫秒

number:是用來增加datepart的值。正數表示增加,負數表示減少,如果指定的是非整數值,則忽略此值的小
數部分,不做四舍五入處理,例如,dateadd(day,1.7,date),表示date增加1天。
date:是返回datetime或smalldatetime值或日期格式字符串的表達式。
2.日期差值計算函數
datediff(datepart,startdate,enddate)
datepart:規定了應在日期的哪一部分計算差值。
startdate:計算的開始日期。
enddate:計算的終止日期。

set datefirst函數是設置一周的第一天是星期幾。

二.日期推算處理
1.指定日期該年的第一天或最後一天
對於年的第一天或最後一天,它們的月日信息(第一天為1月1日、最後一天為12月31日)都是固定的,反以只需取
出指定日期的年份,再加上月份和天(字符串相加)就可以了。
年的第一天:
select convert(char(5),<date>,+"1-1"
年的最後一天:
select convert(char(5),<date>,+12-31"

2.指定日期所在季度的第一天或最後一天
首先分析月份,可以用Datepart(quarter,date)函數取得指定日期所在的季度,一個季度有3個月份,所以datepart(quarter,date)*3就是該季度的最後一個月的月份,再減去2就是該季度最早一個月的月份。接下來要把指定日期的月份轉換到這個推算出的月份,可以把指定日期減去指定日期的月份數,得到指定日期所在年的上一年的最後一個月,然後再加上由季度推算出來的月份數。
再分析天的處理,對於第一天,可以直接取得換算後的年月信息字符串,再用字符串相加上天的信息,轉換回日期型就是指定日期所在季度的第一天;對於最後一天,由於一年就4個季度,對就的每季度的最後一個月份分別是3、6、9、12這4個月,它們的最後一天是確定的,分別是31、30、30、31,所以完全可以用CASE來判斷處理。另一種方法用所在季度最後一個月的下一個月的第一天減1天。
季度的第一天:
select conver(datetime,convert(char(8),dateadd(month,datepart(quarter,<date>)*3-2,dateadd(month,-month(<date>),<date>)),120)+"1")
季度的最後一天(CASE判斷法):select convert(datetime,convert(char(8),dateadd(month,datepart(quarter,)*3,dateadd(month,-month(<date>),<date>)),120)+case when datepart(quarter,<date>) in(1,4) then '31' else'30' end)
季度的最後一天直接推算法:
dateadd(day,-1,convert(char(8),dateadd(month,datepart(quarter,<date>)*3+1,dateadd(month,-month(<date>),<date>)),120)+'1')

3.指定日期所在月份的第一天或最後一天
所在月份的第一天固定為1,只需要取出指定日期的年月部份再加上1就行了。對於月份的最後一天,它隨月份不同而不同,而且還會受平年與閏年的影響,不過當前月份的最後一天肯定是它下個月的1號減去1天,而下個月的1號很容易確定,所以只需要取得指定日期的下個月的1號的日期,然後減1天就行了。
在推算日期所在月份最後一天的處理中,一個容易犯的錯誤是:將指定日期減去當前日期的天數,得到指定日期的上一個月的最後一天。如使用這種處理方法,當指定日期上個月的天數比指定日期把在月份的天數多時,不會出現問題。否則就會少計算天數。
月的第一天:
select convert(datetime,convert(char(8),<date>,120)+'1')
月的最後一天:
select dateadd(day,-1,convert(char(8),dateadd(month,1,<date>),<date>),120)+'1')
月的最後一天(容易使用的錯誤方法):
select dateadd(month,1,dateadd(day,-day(<date>,<date>))

4.計算年齡
要計算准確的年齡,可以這樣考慮,將出生日期的月日部分與當前的日期的月日部分做比較,如果是大於的情況,則表明今年的生日還沒有到,應該將當前日期減去出生日期的結果再減1年,否則直接是現兩個日期年份相減。但這做忽略了一個特殊的日期:閏年的2月29號,這個日期出的人,在平年的時候,應該是2月28號生日,按上面的處理方法恰好是錯過了一天,所以完善的解決方法是,將出生日期的年份增加到與當前日期相同,然後再與當前日期比較,如果大於,則年齡為當前日期減去出生日期的結果再減1年,否則是兩個日期直接相減。
處理代碼如下(其中,<birthday>是出生日期,<current_date>是當前日期)。
select datediff(year,<birthday>,<current_date>)-case when dateadd(year,datediff(year,<birthday>,<current_date>,<birthday>)><current_date> then 1 else 0 end
本文来自网络人站长论坛:http://www.neter8.com/viewthread.php?tid=60443
分享到:
评论

相关推荐

    存储过程中怎么动态执行sql语句

    通过以上两个示例可以看出,在Oracle存储过程中实现动态SQL语句的关键在于利用`EXECUTE IMMEDIATE`动态执行SQL语句以及通过创建包的方式来实现更为复杂的动态数据处理逻辑。这两种方法不仅提高了代码的灵活性,还...

    Delphi中sql语句的使用总结

    ### Delphi中SQL语句的使用总结 在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在...

    OA系统常用SQL语句

    2. **公文档案**:在公文处理过程中,SQL语句可以用于查询、存储和更新文档状态。例如,"批复意见回填表单.doc"和"将处理人姓名与处理时间回填表单字段.doc"可能涉及到对审批流程记录的管理,通过SQL语句更新这些...

    SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf

    SQL 中存储过程中 SQL 语句的单引号和双引号问题 在 SQL 中,单引号和双引号的问题是一个常见的混淆点,特别是在存储过程中编写 SQL 语句时。下面将对此问题进行详细的解释和总结。 一、单引号和双引号的基本概念 ...

    SQL SERVER 数据自动生成SQL语句

    SQL Server 数据自动生成SQL语句是一项实用的功能,它极大地简化了数据迁移或备份的过程。这个功能使得用户能够快速地根据数据库中的表结构和已有数据,生成相应的SQL插入语句,以便将这些数据移植到其他数据库系统...

    易语言常用SQL语句

    ### 易语言中的SQL语句应用详解 #### 一、复制表结构 **知识点:** 在数据库管理中,经常需要创建具有相同结构的新表。在易语言中可以通过SQL语句来实现这一操作。 **示例代码:** ```sql SELECT * INTO b FROM a ...

    sql结果还原为sql语句 python脚本

    5. **日期字段加*识别更改星期表名功能**:这可能指的是在SQL语句中,日期字段的值被用于动态生成基于星期的表名,例如“周报表”。通过在日期字段前后添加特定符号(如*),可以识别并替换这些表达式,以生成相应的...

    SQL语句生成器

    比如,用户可以根据需求生成计算字段值的函数,如SUM、AVG、MAX、MIN等统计函数,或者DATE_FORMAT等日期时间处理函数,大大增强了SQL语句的灵活性和实用性。 从文件列表来看,`res.dll`可能是资源库文件,包含了...

    SQL语句基础PPT

    4. **查询数据**: SELECT语句是最常用的SQL语句,用于从表中检索数据。可以指定列、使用WHERE子句过滤数据,使用GROUP BY进行分组,HAVING用于在分组后过滤,ORDER BY进行排序。 5. **更新与删除数据**: UPDATE语句...

    易语言SQL语句生成器

    《易语言SQL语句生成器》是一款专为易语言编程环境设计的工具,它能够帮助开发者自动生成SQL语句,极大地提高了开发效率。这款软件的核心功能包括:取后缀名、转换程序、取mdb表名以及生成局部变量语句等。下面我们...

    SQL语句基础教程。SQL语句基础教程

    10. 存储过程:存储过程是一组预编译的SQL语句,可以封装在单个数据库对象中。它们允许你创建可重用的代码,提高性能,并可以接受参数以实现更灵活的调用。 通过这个“SQL语句基础教程”,初学者将逐步了解和掌握...

    SQL语句中设置多个字符串

    本实例将深入探讨如何在SQL语句中设置多个字符串条件,这对于初学者掌握数据库操作至关重要。 首先,让我们了解SQL的基本结构。SQL主要用于与关系型数据库进行交互,其基本查询语句包括SELECT,FROM,WHERE等部分。...

    SQL语句手册.chm

    在“SQL语句手册.chm”中,我们可以期待找到关于SQL的全面介绍,包括其基本概念、语法以及如何执行各种操作。下面我们将深入探讨SQL的关键知识点。 1. **SQL基础**: SQL的基本组成部分包括数据定义语言(DDL)、...

    SQL SQL语句大全

    根据给定的信息,我们可以深入探讨SQL语言的基本概念与应用,并基于示例代码解析常见的SQL语句及其实现功能。此文档主要围绕SQL语句的基本结构、表的创建、数据插入以及查询等方面进行展开。 ### SQL语言简介 SQL...

    实用总结SQL语句大全实用总结SQL语句大全.rar

    总之,“实用总结SQL语句大全”将引导你掌握SQL的基本用法,理解其核心概念,并能灵活运用到实际数据库操作中。无论是初学者还是有经验的数据库管理员,这个资源都能提供宝贵的参考。通过深入学习和实践,你可以提升...

    SQL基本语句 SQL基本语句

    例如,插入John Smith的记录,SQL语句如下: ```sql INSERT INTO EMPLOYEES (LAST_NAME, FIRST_NAME, HIRE_DATE, CITY, DEPARTMENT_ID, SALARY) VALUES ('Smith', 'John', '1980-06-10', 'Los Angles', 16, 45000); ...

    oracle常用SQL语句(汇总版).docx

    在本文中,我们将详细介绍 Oracle 中常用的 SQL 语句,包括数据控制语句(DML)、数据定义语句(DDL)和其他相关知识点。 一、数据控制语句(DML) 数据控制语句用于操作数据库中的数据,包括插入、删除、更新等...

    SQL 语句 帮助文档

    - **SELECT语句**:是最常用的SQL语句,用于从数据库中检索数据。可以结合WHERE子句进行条件筛选,GROUP BY子句进行分组,HAVING子句对分组结果进行筛选,ORDER BY子句进行排序,LIMIT或TOP子句限制返回的记录数。 ...

    将数据库中的数据转换成sql语句

    在这种情况下,"将数据库中的数据转换成SQL语句"就显得尤为重要,因为它能有效地解决数据移植过程中的版本不兼容问题,提高迁移效率。 SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言。...

Global site tag (gtag.js) - Google Analytics