資料庫閏年
㈠ 資料庫用select語句查詢閏年
create function [dbo].[fn_IsLeapYear]
(
@year int
)
returns varchar(14)
as begin
declare @returnvalue int
----varchar(14)
declare @setvalue int
set @setvalue=datepart(mm,dateadd(dd,1,cast((cast(@year as varchar(4))+ '0228') as datetime)))
if(@setvalue=2)
set @returnvalue=1
---@returnvalue='閏年'
else
set @returnvalue=0
---@returnvalue='非閏年'
----return (cast (@year as varchar(8))+'年:'+@returnvalue)
return @returnvalue
end
GO
㈡ 資料庫問題(sql)
1,判斷閏年並輸出其結果,判斷素數並輸出其結果;
能被4整除卻不能被100整除
或
能被400整除的年份是閏年"
其實就是說:
不是以0結尾的年份能被4整除但不能被100整除的年份是閏年.
以0結尾的年份若能被400整除就是閏年.
2,判斷整除(mod(),int())
可以用int(a/b)=a/b。數據可以很大,大到死機都沒溢出。呵呵...
3,分支結構
循環及雙重循環
輸入值到(數組)變數
定義一個數組,接收值就行啊
,
交換
求數組中的最(大,小)值;
可以用max函數的。
圖案輸出(@x,y
say"*");
對數據表記錄的查詢,統計等內容。
查詢:select
統計:sum函數
你問
的又點籠統啊
!@
不好回答
呵呵
㈢ php時間問題mysql資料庫的時間格式(Y-M-D H:I:S) 在PHP頁面想這樣顯示(Y-M-D) ('.$rows['ndate'].')
1、首先在電腦上創建一個index.php文件,編輯index.php。
㈣ 探討:(JAVA中:關於判斷是否是閏年問題)
你的代碼我沒細看 就看了最後的public final static boolean isLeapYear(int year)方法,首先肯定的是 你方法的聲明錯了,final生命的方法或變數以後是改變不了的,單從你判斷閏年的語句來看是沒有錯誤的。
經常final 和 static 連起來用是用來生命不可改變的屬性的,比如資料庫的操作
public class DB
{
public static final String driver="...";
public static final String url="...";
public static final String user="scott";
public static final String password="tiger";
}
㈤ oracle資料庫時間日期查詢
TO_DATE格式(以時間:2007-11-02 13:45:25為例)
Year:
yy two digits 兩位年 顯示值:07
yyy three digits 三位年 顯示值:007
yyyy four digits 四位年 顯示值:2007
Month:
mm number 兩位月 顯示值:11
mon abbreviated 字元集表示 顯示值:11月,若是英文版,顯示nov
month spelled out 字元集表示 顯示值:11月,若是英文版,顯示november
Day:
dd number 當月第幾天 顯示值:02
ddd number 當年第幾天 顯示值:02
dy abbreviated 當周第幾天簡寫 顯示值:星期五,若是英文版,顯示fri
day spelled out 當周第幾天全寫 顯示值:星期五,若是英文版,顯示friday
ddspth spelled out, ordinal twelfth
Hour:
hh two digits 12小時進制 顯示值:01
hh24 two digits 24小時進制 顯示值:13
Minute:
mi two digits 60進制 顯示值:45
Second:
ss two digits 60進制 顯示值:25
其它
Q digit 季度 顯示值:4
WW digit 當年第幾周 顯示值:44
W digit 當月第幾周 顯示值:1
24小時格式下時間范圍為: 0:00:00 - 23:59:59....
12小時格式下時間范圍為: 1:00:00 - 12:59:59 ....
1. 日期和字元轉換函數用法(to_date,to_char)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from al; //日期轉化為字元串
select to_char(sysdate,'yyyy') as nowYear from al; //獲取時間的年
select to_char(sysdate,'mm') as nowMonth from al; //獲取時間的月
select to_char(sysdate,'dd') as nowDay from al; //獲取時間的日
select to_char(sysdate,'hh24') as nowHour from al; //獲取時間的時
select to_char(sysdate,'mi') as nowMinute from al; //獲取時間的分
select to_char(sysdate,'ss') as nowSecond from al; //獲取時間的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from al//
2.
select to_char( to_date(222,'J'),'Jsp') from al
顯示Two Hundred Twenty-Two
3.求某天是星期幾
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from al;
星期一
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from al;
monday
設置日期語言
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以這樣
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
4. 兩個日期間的天數
select floor(sysdate - to_date('20020405','yyyymmdd')) from al;
5. 時間為null的用法
select id, active_date from table1
UNION
select 1, TO_DATE(null) from al;
注意要用TO_DATE(null)
6.月份差
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
那麼12月31號中午12點之後和12月1號的12點之前是不包含在這個范圍之內的。
所以,當時間需要精確的時候,覺得to_char還是必要的
7. 日期格式沖突問題
輸入的格式要看你安裝的ORACLE字元集的類型, 比如: US7ASCII, date格式的類型就是: '01-Jan-01'
alter system set NLS_DATE_LANGUAGE = American
alter session set NLS_DATE_LANGUAGE = American
或者在to_date中寫
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from al;
注意我這只是舉了NLS_DATE_LANGUAGE,當然還有很多,
可查看
select * from nls_session_parameters
select * from V$NLS_PARAMETERS
8.
select count(*)
from ( select rownum-1 rnum
from all_objects
where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
02-01','yyyy-mm-dd')+1
)
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
not in ( '1', '7' )
查找2002-02-28至2002-02-01間除星期一和七的天數
在前後分別調用DBMS_UTILITY.GET_TIME, 讓後將結果相減(得到的是1/100秒, 而不是毫秒).
9. 查找月份
select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1
select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
1.03225806451613
10. Next_day的用法
Next_day(date, day)
Monday-Sunday, for format code DAY
Mon-Sun, for format code DY
1-7, for format code D
11
select to_char(sysdate,'hh:mi:ss') TIME from all_objects
注意:第一條記錄的TIME 與最後一行是一樣的
可以建立一個函數來處理這個問題
create or replace function sys_date return date is
begin
return sysdate;
end;
select to_char(sys_date,'hh:mi:ss') from all_objects;
12.獲得小時數
extract()找出日期或間隔值的欄位值
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
SQL> select sysdate ,to_char(sysdate,'hh') from al;
SYSDATE TO_CHAR(SYSDATE,'HH')
-------------------- ---------------------
2003-10-13 19:35:21 07
SQL> select sysdate ,to_char(sysdate,'hh24') from al;
SYSDATE TO_CHAR(SYSDATE,'HH24')
-------------------- -----------------------
2003-10-13 19:35:21 19
13.年月日的處理
select older_date,
newer_date,
years,
months,
abs(
trunc(
newer_date-
add_months( older_date,years*12+months )
)
) days
from ( select
trunc(months_between( newer_date, older_date )/12) YEARS,
mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,
newer_date,
older_date
from (
select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date
from emp
)
)
14.處理月份天數不定的辦法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from al
16.找出今年的天數
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from al
閏年的處理方法
to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )
如果是28就不是閏年
㈥ 如果第求饒太陽旋轉一周是365.2422天,那閏年該怎樣規定
前幾天做按月份瀏覽的功能,當時馬虎了,只是簡單的按月的最多天數31天做了定義.可能是測試的時候走xx運,沒有出錯.不錯今天再次測試的時候就錯誤不斷了
,仔細檢查了一下,原來資料庫中對天數也是做好定義的.-_-!汗.
查找了一下閏年的演算法,記錄一下:
計算是否是閏年,其實關鍵是閏年的演算法,也就是閏年的來歷。先看完下面的資料,估計就大體明白了。
關於公歷閏年是這樣規定的:地球繞太陽公轉一周叫做一回歸年,一回歸年長365日5時48分46秒。因此,公歷規定有平年和閏年,平年一年有365日,比回歸年短0.2422日,四年共短0.9688
日,故每四年增加一日,這一年有366日,就是閏年。但四年增加一日比四個回歸年又多0.0312日,400年後將多3.12日,故在400年中少設3個閏年,也就是在400年中只設97個閏年,這樣公歷年的平均長度與回歸年就相近似了。由此規定:年份是整百數的必須是400的倍數才是閏年,例如1900
年、2100年就不是閏年。
我們居住的地球總是繞著太陽旋轉的。地球繞太陽轉一圈需要365天5時48分46秒,也就是365.2422天。為了方便,一年定為365天,叫做平年;這樣每過四年差不多就要多出一天來,把這一天加在2月里,這一年就有366天,叫做閏年。
通常,每四年裡有三個平年一個閏年。公歷年份是4的倍數的,一般都是閏年。
按照每四年一個閏年計算,平均每年就要多算出0.0078天,這樣經過四百年就會多算出大約3天來,因此,每四百年中要減少三個閏年。所以規定,公歷年份是整百數的,必須是400的倍數的才是閏年,不是400的倍數的就是平年。
也就是我們通常所說的:
四年一閏,百年不閏,四百年再閏。
所以在寫的時候就可以這樣寫.
if
($year%4
==
0)
{
if
($year%100
==
0)
{
if
($year%400
==
0)
{
echo
"閏年";
}
}
else
{
echo
"不是閏年";}
}
else{
echo
"不是閏年";
}
㈦ 在資料庫中如何判斷某一天到沒到星期天呢
要獲得當前日期和計算一些其他的日期,例如,你的程序可能需要判斷一個月的第一天或者最後一天。你們大部分人大概都知道怎樣把日期進行分割(年、月、日等),然後僅僅用分割出來的年、月、日等放在幾個函數中計算出自己所需要的日期!在這篇文章里,我將告訴你如何使用DATEADD和DATEDIFF函數來計算出在你的程序中可能你要用到的一些不同日期。
在使用本文中的例子之前,你必須注意以下的問題。大部分可能不是所有例子在不同的機器上執行的結果可能不一樣,這完全由哪一天是一個星期的第一天這個設置決定。第一天(DATEFIRST)設定決定了你的系統使用哪一天作為一周的第一天。所有以下的例子都是以星期天作為一周的第一天來建立,也就是第一天設置為7。假如你的第一天設置不一樣,你可能需要調整這些例子,使它和不同的第一天設置相符合。你可以通過@@DATEFIRST函數來檢查第一天設置。
為了理解這些例子,我們先復習一下DATEDIFF和DATEADD函數。DATEDIFF函數計算兩個日期之間的小時、天、周、月、年等時間間隔總數。DATEADD函數計算一個日期通過給時間間隔加減來獲得一個新的日期。要了解更多的DATEDIFF和DATEADD函數以及時間間隔可以閱讀微軟聯機幫助。
使用DATEDIFF和DATEADD函數來計算日期,和本來從當前日期轉換到你需要的日期的考慮方法有點不同。你必須從時間間隔這個方面來考慮。比如,從當前日期到你要得到的日期之間有多少時間間隔,或者,從今天到某一天(比如1900-1-1)之間有多少時間間隔,等等。理解怎樣著眼於時間間隔有助於你輕松的理解我的不同的日期計算例子。
一個月的第一天
第一個例子,我將告訴你如何從當前日期去這個月的最後一天。請注意:這個例子以及這篇文章中的其他例子都將只使用DATEDIFF和DATEADD函數來計算我們想要的日期。每一個例子都將通過計算但前的時間間隔,然後進行加減來得到想要計算的日期。
這是計算一個月第一天的SQL 腳本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我們把這個語句分開來看看它是如何工作的。最核心的函數是getdate(),大部分人都知道這個是返回當前的日期和時間的函數。下一個執行的函數DATEDIFF(mm,0,getdate())是計算當前日期和「1900-01-01 00:00:00.000」這個日期之間的月數。記住:時期和時間變數和毫秒一樣是從「1900-01-01 00:00:00.000」開始計算的。這就是為什麼你可以在DATEDIFF函數中指定第一個時間表達式為「0」。下一個函數是DATEADD,增加當前日期到「1900-01-01」的月數。通過增加預定義的日期「1900-01-01」和當前日期的月數,我們可以獲得這個月的第一天。另外,計算出來的日期的時間部分將會是「00:00:00.000」。
這個計算的技巧是先計算當前日期到「1900-01-01」的時間間隔數,然後把它加到「1900-01-01」上來獲得特殊的日期,這個技巧可以用來計算很多不同的日期。下一個例子也是用這個技巧從當前日期來產生不同的日期。
本周的星期一
這里我是用周(wk)的時間間隔來計算哪一天是本周的星期一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
一年的第一天
現在用年(yy)的時間間隔來顯示這一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第一天
假如你要計算這個季度的第一天,這個例子告訴你該如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
當天的半夜
曾經需要通過getdate()函數為了返回時間值截掉時間部分,就會考慮到當前日期是不是在半夜。假如這樣,這個例子使用DATEDIFF和DATEADD函數來獲得半夜的時間點。
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深入DATEDIFF和DATEADD函數計算
你可以明白,通過使用簡單的DATEDIFF和DATEADD函數計算,你可以發現很多不同的可能有意義的日期。
目前為止的所有例子只是僅僅計算當前的時間和「1900-01-01」之間的時間間隔數量,然後把它加到「1900-01-01」的時間間隔上來計算出日期。假定你修改時間間隔的數量,或者使用不同的時間間隔來調用DATEADD函數,或者減去時間間隔而不是增加,那麼通過這些小的調整你可以發現和多不同的日期。
這里有四個例子使用另外一個DATEADD函數來計算最後一天來分別替換DATEADD函數前後兩個時間間隔。
上個月的最後一天
這是一個計算上個月最後一天的例子。它通過從一個月的最後一天這個例子上減去3毫秒來獲得。有一點要記住,在Sql Server中時間是精確到3毫秒。這就是為什麼我需要減去3毫秒來獲得我要的日期和時間。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
計算出來的日期的時間部分包含了一個Sql Server可以記錄的一天的最後時刻(「23:59:59:997」)的時間。
去年的最後一天
連接上面的例子,為了要得到去年的最後一天,你需要在今年的第一天上減去3毫秒。
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
本月的最後一天
現在,為了獲得本月的最後一天,我需要稍微修改一下獲得上個月的最後一天的語句。修改需要給用DATEDIFF比較當前日期和「1900-01-01」返回的時間間隔上加1。通過加1個月,我計算出下個月的第一天,然後減去3毫秒,這樣就計算出了這個月的最後一天。這是計算本月最後一天的SQL腳本。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
本年的最後一天
你現在應該掌握這個的做法,這是計算本年最後一天腳本
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
本月的第一個星期一
好了,現在是最後一個例子。這里我要計算這個月的第一個星期一。這是計算的腳本。
select DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
), 0)
在這個例子里,我使用了「本周的星期一」的腳本,並作了一點點修改。修改的部分是把原來腳本中「getdate()」部分替換成計算本月的第6天,在計算中用本月的第6天來替換當前日期使得計算可以獲得這個月的第一個星期一。
總結
我希望這些例子可以在你用DATEADD和DATEDIFF函數計算日期時給你一點啟發。通過使用這個計算日期的時間間隔的數學方法,我發現為了顯示兩個日期之間間隔的有用歷法是有價值的。注意,這只是計算出這些日期的一種方法。要牢記,還有很多方法可以得到相同的計算結果。假如你有其他的方法,那很不錯,要是你沒有,我希望這些例子可以給你一些啟發,當你要用DATEADD和DATEDIFF函數計算你程序可能要用到的日期時。
---------------------------------------------------------------
附錄,其他日期處理方法
1)去掉時分秒
declare @ datetime
set @ = getdate() --'2003-7-1 10:00:00'
SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)
2)顯示星期幾
select datename(weekday,getdate())
3)如何取得某個月的天數
declare @m int
set @m=2 --月份
select datediff(day,'2003-'+cast(@m as varchar)+'-15' ,'2003-'+cast(@m+1 as varchar)+'-15')
另外,取得本月天數
select datediff(day,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate()) as varchar)+'-15' ,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate())+1 as varchar)+'-15')
或者使用計算本月的最後一天的腳本,然後用DAY函數區最後一天
SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))
4)判斷是否閏年:
SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then '平年' else '閏年' end
或者
select case datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01'))
when 28 then '平年' else '閏年' end
5)一個季度多少天
declare @m tinyint,@time smalldatetime
select @m=month(getdate())
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'
select datediff(day,@time,dateadd(mm,3,@time))
5)一個季度多少天
每個季度是三個月,很有規律的,可以用一個表達式計算出來,而不必使用 case when:
set @m = convert(int, (@m - 1) / 3) * 3 + 1
原創文章如轉載,請註明:轉載自:巴士飛揚-技術BLOG :
本文鏈接地址:
㈧ 判斷今年是不是閏年,以二月份的最後一天是否是28天進行判斷,是則為閏年,否則為平年
用年份除以4能除盡的話就是閏年。二月份有29天的就是閏年,有28天的就是平年。所以閏年的2月份是29天,不是28天。