SQL 日期比较计算

SQL 日期比较计算,第1张

case when Date>sysdate then substr(date,1,4)-substr(sysdate,1,4)||'年'||substr(date,4,2)-substr(sysdate,4,2)||'月'

when date like '200803' then '0年0月'

改成这样就OK了

case when Date>sysdate then substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'

when date like '200803' then '0年0月'

那就再改

case when Date>sysdate and substr(date,1,4)>=substr(sysdate,1,4)

and substr(date,4,2)>substr(sysdate,4,2) then substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'

when substr(date,1,4)>substr(sysdate,1,4)

and substr(date,4,2)<substr(sysdate,4,2) then substr(date,1,4)-substr(sysdate,1,4)-1||'年'||(substr(date,4,2)+12-substr(sysdate,4,2))||'月'

when date like '200803%' then '0年0月' end

哥们,你那as test 没错,但是case when 后面一定要有end

将end 加上再看看

datadiff 是多少年 多少月多少天的函数。 折算法。这个函数是不满足你的要求的。

你可要把 工作止的年——工作七的年 和月之差 组合得到你的结果。

当然要判断 月月之差 若 〉零 年年 要减去 1 。月月之差要+12 大于0 就是正常运算了。

下面是我把日期换成了 世界的时间 测试了 是ok的。

希望可以帮助你。

我感觉不要用access 要C#或 java 。

CASE WHEN MONTH('2014/4/26') - MONTH('2013/8/20') < 0 THEN CAST(year('2014-4-26') - year('2013-8-20') - 1 AS varchar(100)) + '年' + CAST(MONTH('2014/4/26') - MONTH('2013/8/20') + 12 AS varchar(100)) + '月' END

select (to_date(trunc(sydate)||' '||'01:00:00')-trunc(sysdate))2460 from dual;

方法是先把字符串和日期连接起来组成带时间的DATETIME字符串格式再转成DATETIME型,然后就可以处理日期型数据了。

以每周5天为例吧 可以这样设计 向下去整[(结束日期- 初试日期)/7] 余数另算 特殊假日另算 { 向下去整[(结束日期- 初试日期)/7] 余数另算}-减去 中间如果特殊假日和周末冲突可以另建一张表储存判断

不知道你是用什么语言写:

下面是c#的代码:DateTimeNowToShortDateString()

如果是别的日期形式你用:DateTimeParse(DateTimestring)ToShortDateString()转换成日期形式再存。

附上所有日期形式:

DateTime dt = DateTimeNow;

// Label1Text = dtToString();//2005-11-5 13:21:25

// Label2Text = dtToFileTime()ToString();//127756416859912816

// Label3Text = dtToFileTimeUtc()ToString();//127756704859912816

// Label4Text = dtToLocalTime()ToString();//2005-11-5 21:21:25

// Label5Text = dtToLongDateString()ToString();//2005年11月5日

// Label6Text = dtToLongTimeString()ToString();//13:21:25

// Label7Text = dtToOADate()ToString();//386615565508218

// Label8Text = dtToShortDateString()ToString();//2005-11-5

// Label9Text = dtToShortTimeString()ToString();//13:21

// Label10Text = dtToUniversalTime()ToString();//2005-11-5 5:21:25

// 2005-11-5 13:30:284412864

// Label1Text = dtYearToString();//2005

// Label2Text = dtDateToString();//2005-11-5 0:00:00

// Label3Text = dtDayOfWeekToString();//Saturday

// Label4Text = dtDayOfYearToString();//309

// Label5Text = dtHourToString();//13

// Label6Text = dtMillisecondToString();//441

// Label7Text = dtMinuteToString();//30

// Label8Text = dtMonthToString();//11

// Label9Text = dtSecondToString();//28

// Label10Text = dtTicksToString();//632667942284412864

// Label11Text = dtTimeOfDayToString();//13:30:284412864

// Label1Text = dtToString();//2005-11-5 13:47:04

// Label2Text = dtAddYears(1)ToString();//2006-11-5 13:47:04

// Label3Text = dtAddDays(11)ToString();//2005-11-6 16:11:04

// Label4Text = dtAddHours(11)ToString();//2005-11-5 14:53:04

// Label5Text = dtAddMilliseconds(11)ToString();//2005-11-5 13:47:04

// Label6Text = dtAddMonths(1)ToString();//2005-12-5 13:47:04

// Label7Text = dtAddSeconds(11)ToString();//2005-11-5 13:47:05

// Label8Text = dtAddMinutes(11)ToString();//2005-11-5 13:48:10

// Label9Text = dtAddTicks(1000)ToString();//2005-11-5 13:47:04

// Label10Text = dtCompareTo(dt)ToString();//0

//// Label11Text = dtAdd()ToString();//问号为一个时间段

// Label1Text = dtEquals("2005-11-6 16:11:04")ToString();//False

// Label2Text = dtEquals(dt)ToString();//True

// Label3Text = dtGetHashCode()ToString();//1474088234

// Label4Text = dtGetType()ToString();//SystemDateTime

// Label5Text = dtGetTypeCode()ToString();//DateTime

// Label1Text = dtGetDateTimeFormats('s')[0]ToString();//2005-11-05T14:06:25

// Label2Text = dtGetDateTimeFormats('t')[0]ToString();//14:06

// Label3Text = dtGetDateTimeFormats('y')[0]ToString();//2005年11月

// Label4Text = dtGetDateTimeFormats('D')[0]ToString();//2005年11月5日

// Label5Text = dtGetDateTimeFormats('D')[1]ToString();//2005 11 05

// Label6Text = dtGetDateTimeFormats('D')[2]ToString();//星期六 2005 11 05

// Label7Text = dtGetDateTimeFormats('D')[3]ToString();//星期六 2005年11月5日

// Label8Text = dtGetDateTimeFormats('M')[0]ToString();//11月5日

// Label9Text = dtGetDateTimeFormats('f')[0]ToString();//2005年11月5日 14:06

// Label10Text = dtGetDateTimeFormats('g')[0]ToString();//2005-11-5 14:06

// Label11Text = dtGetDateTimeFormats('r')[0]ToString();//Sat, 05 Nov 2005 14:06:25 GMT

Label1Text = stringFormat("{0:d}",dt);//2005-11-5

Label2Text = stringFormat("{0:D}",dt);//2005年11月5日

Label3Text = stringFormat("{0:f}",dt);//2005年11月5日 14:23

Label4Text = stringFormat("{0:F}",dt);//2005年11月5日 14:23:23

Label5Text = stringFormat("{0:g}",dt);//2005-11-5 14:23

Label6Text = stringFormat("{0:G}",dt);//2005-11-5 14:23:23

Label7Text = stringFormat("{0:M}",dt);//11月5日

Label8Text = stringFormat("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT

Label9Text = stringFormat("{0:s}",dt);//2005-11-05T14:23:23

Label10Text = stringFormat("{0:t}",dt);//14:23

Label11Text = stringFormat("{0:T}",dt);//14:23:23

Label12Text = stringFormat("{0:u}",dt);//2005-11-05 14:23:23Z

Label13Text = stringFormat("{0:U}",dt);//2005年11月5日 6:23:23

Label14Text = stringFormat("{0:Y}",dt);//2005年11月

Label15Text = stringFormat("{0}",dt);//2005-11-5 14:23:23

Label16Text = stringFormat("{0:yyyyMMddHHmmssffff}",dt);

DATEDIFF(datepart,startdate,enddate)比如:SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate得到结果是1 datepart 参数可以是下列的值:datepart缩写年yy, yyyy季度qq, q月mm, m年中的日dy, y日dd, d周wk, ww星期dw, w小时hh分钟mi, n秒ss, s毫秒ms微妙mcs纳秒ns

如:起始时间 2011-1-1 截止日期 2011-2-1 两个时间比较相差 0年1个月 如:起始时间 2010-11-1 截止日期 2011-12-1 两个时间比较相差 1年1个月 怎么比较才能得出~ 相差多少年 多少个月 这个当然很简单, 一句SQL就可以了:select ltrim(datediff(yy,@dt1,@dt2))+'年'+ltrim(datediff(mm,@dt1,@dt2)%12)+'月'

但是如果连几天也要计算呢?闲着没事自己随便在SQL Server下写了写,store procedures代码如下,应该没可以了:CREATE PROCEDURE GetDateDiff

@fromDate nvarchar(10),

@toDate nvarchar(10)

AS

DECLARE @YearDiff INTEGER

DECLARE @MonthDiff INTEGER

DECLARE @DayDiff INTEGER

DECLARE @ToMonth INTEGER

DECLARE @FromDay INTEGER

DECLARE @ToDay INTEGER

SET @YearDiff = LTRIM(DATEDIFF(yy, @fromDate, @toDate))

SET @MonthDiff = LTRIM(DATEDIFF(mm, @fromDate, @toDate)%12)

SET @ToMonth = Month(cast(@toDate as Datetime))

SET @FromDay = Day(cast(@fromDate as Datetime))

SET @ToDay = Day(cast(@ToDate as Datetime))

IF (@ToDay - @FromDay) < 0

BEGIN

IF (@ToMonth - 1) = 1 OR (@ToMonth - 1) = 3 OR (@ToMonth - 1) = 5 OR (@ToMonth - 1) = 7 OR (@ToMonth - 1) = 8 OR (@ToMonth - 1) = 10 OR (@ToMonth - 1) = 12

BEGIN

SET @DayDiff = 31 + @Today - @FromDay

SET @MonthDiff = @MonthDiff -1

END

ELSE

BEGIN

SET @DayDiff = 30 + @Today - @FromDay

SET @MonthDiff = @MonthDiff -1

END

END

ELSE

BEGIN

SET @DayDiff = @Today - @FromDay

END

SELECT CAST(@YearDiff AS NVARCHAR(10)) + '年' + CAST(@MonthDiff AS NVARCHAR(10)) + '月' + CAST(@DayDiff AS NVARCHAR(10)) + '日'

以上就是关于SQL 日期比较计算全部的内容,包括:SQL 日期比较计算、如何自动计算access2007数据库中两个日期字段的时间差、oracle如何计算系统时间与数据库的时间差(分钟)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9768749.html

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

发表评论

登录后才能评论

评论列表(0条)

保存