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 就是正常运算了。
希望可以帮助你。
我感觉不要用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如何计算系统时间与数据库的时间差(分钟)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)