SQL Date 時間類型處理


SQL 日期(Dates)   2019-10-17 22:17:26

        當我們處理日期時,最難的任務恐怕是確保插入的日期的格式,與數據庫中日期列的格式相匹配。

        保存的如果是日期部分,查詢不會有太大問題。但是如果涉及到時間部分,情況就有點復雜了。

        下面我們先看看內建日期處理函數


SQL Server Date函數

下面列舉出了SQL Server中最重要的內建日期函數:

1、GETDATE()  返回當前日期和時間

     語法:

GETDATE()

     下面是SELECT語句:

SELECT GETDATE() AS DateTime

      結果如下所示:

 

 

 注釋:上面的時間是精確到毫秒。

 

 2、DATEPART() 返回日期/時間的單獨部分

      語法:

DATEPART(datepart,date)

date參數是合法的日期表達式。datepart參數可以是下列的值:

datepart 縮寫
yy,yyyy
季度 qq,q
mm,m
年中的日 dy,y
dd,d
wk,ww
星期 dw,w
小時 hh
分鍾 mi,n
ss,s
毫秒 ms
微秒 mcs
納秒 ns

 

 

 

 

 

 

 

 

 

 

 

 

      實例:

select datepart(yy,getdate());

 

 

 

3、DATEADD() 在日期中添加或減去指定的時間間隔

      語法:

DATEADD(datepart,number,date)

 

date參數是合法的日期表達式。number是您希望添加的間隔數;對於未來日期,次數是正數,對於過去的時間,次數是負數。

datepart參數值跟上面列舉的參數值一致,在此我就不復制一份了

      實例:

select DATEADD(day,30,GETDATE());

      結果:

 

 

 

 

4、DATEDIFF() 返回兩個日期之間的時間

      語法:

DATEDIFF(datepart,startdate,enddate)
startdate和enddate 參數是合法的日期表達式。datepart參數跟上面列舉的一樣

實例:
select DATEDIFF(day,'2019-10-17','2020-1-24');

       結果:

 

5、CONVART() 用不同的格式顯示日期/時間

       語法:

CONVERT(data_type(length),expression,style)
描述
data_type(length) 規定目標數據類型(帶有可選的長度)。
expressin 規定需要轉換的值。
style 規定日期/時間的輸出格式

       

 

 

 

下面的表格展示了datetime或smalldatetime轉換為字符數據的style值:

 值(世紀yy)  值(世紀yyyy) 輸入/輸出   標准
 -  0 or 100  mon dd yyyy hh:miAM(or PM)  Default
 1  101  mm/dd/yy  USA
 2  102  yy.mm.dd  ANSI
 3  103 dd/mm/yy  British/French 
 4  104  dd.mm.yy  German 
 5  105  dd-mm-yy  ltalian 
 6  106  dd mon yy   
 7  107  Mon dd,yy   
 8  108  hh:mm:ss   
 -  9 or 109   mon dd yyyy hh:mi:ss:mmmAM(or PM)  Default+millisec 
 10  110   mm-dd-yy  USA 
 11  111  yy/mm/dd  Japan 
 12  112  yymmdd  ISO 
 -  13 or 113  dd mon yyyy hh:mi:ss:mmm(24h)   
 14  114  hh:mi:ss:mmm(24h)  
 - 20 or 120  yyyy-mm-dd hh:mi:ss(24h)   
 - 21 or 121  yyyy-mm-dd hh:mi:ss.mmm(24h)   
 -  126 yyyy-mm-ddThh:mi:ss.mmm(no spaces) ISO8601 
 -  130  dd mon yyyy hh:mi:ss:mmmAM Hijiri 
 - 131  dd/mm/yy hh:mi:ss:mmmAM  Hijiri 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         實例:

     下面的腳本使用CONVERT()函數來顯示不同的格式。使用GETDATE()函數來獲取當前的日期/時間

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

   

結果如下所示:

Nov 04 2011 11:45 PM
11-04-11
11-04-2011
04 Nov 11
04 Nov 2011
04 Nov 2011 11:45:34:243

 


 

 

PostgreSQL 時間/日期函數和操作符

在 postgre中一些特定的時間,數字可以進行基本操作符 加+ 減- 乘* 除/ 操作

日期/時間操作符

操作符 例子 結果
+ select date '2019-10-18' +integer '7' date '2019-10-25'
+ select date '2019-10-18' + interval '1 hour' timestamp '2019-10-18 01:00:00'
+ select date '2019-10-18' + time '03:00' timestamp '2019-10-18 03:00:00'
+ select interval '1 day' + interval '1 hour' interval '1 day 01:00:00'
+ select timestamp '2019-10-18 01:00' + interval '23 hours' timestamp '2019-10-19 00:00:00'
+ select time '01:00' + interval '3 hours' time '04:00:00'
- - interval '23 hours' interval -23:00:00
- select date '2019-10-18' - date '2019-10-15' intrger 3(days)
- select date '2019-10-18' - integer '7' date '2019-10-11'
- date '2001-09-28' - interval '1 hour' timestamp '2019-10-17 23:00:00'
- time '05:00' - time '03:00' interval '02:00:00'
- time '05:00' - interval '2 hours' time '03:00:00'
- select timestamp '2019-10-18 23:00' - interval '23 hours' timestamp '2019-10-18 00:00:00'
- select interval '1 day' - interval '1 hour' interval '1 day -01:00:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '2 days 15:00:00'
* 900 * interval '1 second' interval '00:15:00'
* select 21 * interval '1 day' interval '21 days'
* select double precision '3.5' * interval '1 hour' interval '03:30:00'
/ interval '1 hour' / double precision '1.5' interval '00:40:00'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

日期/時間函數

 函數  返回類型  描述  例子 結果 
 age(timestamptimestamp)  interval 減去參數后的"符號化"結果,使用年和月,不只是使用天  select age(timestamp '2019-10-18', timestamp '1998-07-31')  "21 years 2 mons 18 days"
 age(timestamp)  interval  從current_date減去參數后的結果(在午夜)  select age(timestamp '1998-07-31')  "21 years 2 mons 18 days"
clock_timestamp()  timestamp with time zone  實時時鍾的當前時間戳(在語句執行時變化)  select clock_timestamp()  "2019-10-18 21:47:03.880667+08"
current_date  date  當前的日期;  select current_date  "2019-10-18"
current_time time with time zone 當前的時間;  select current_time "21:50:35.168911+08:00"
current_timestamp  timestamp with time zone  當前事務開始時的時間戳; select current_timestamp  "2019-10-18 21:49:17.912353+08"
 date_part(texttimestamp)  double precision  獲取子域(等效於extract);  date_part('hour', timestamp '2001-02-16 20:38:40')  22
 date_part(textinterval)  double precision  獲取子域(等效於extract);  date_part('month', interval '2 years 3 months')  3
 date_trunc(texttimestamp)  timestamp  截斷成指定的精度;  select date_trunc('hour', timestamp '2019-10-18 22:55:40') "2019-10-18 22:00:00"
 date_trunc(textinterval)  interval  截取指定的精度,  date_trunc('hour', interval '2 days 3 hours 40 minutes')  "2 days 03:00:00"
 extract(field from timestamp)  double precision  獲取子域; select extract(hour from timestamp '2019-10-18 22:58:40')  "22"
 extract(field from interval)  double precision  獲取子域;  select extract(month from interval '2 years 3 months')  "3"
 isfinite(date)  boolean  測試是否為有窮日期(不是 +/-無窮)  select isfinite(date '2019-10-18')  true
 isfinite(timestamp)  boolean  測試是否為有窮時間戳(不是 +/-無窮)  select isfinite(timestamp '2001-02-16 21:28:30')  true
 isfinite(interval)  boolean  測試是否為有窮時間間隔  select isfinite(interval '4 hours')  true
 justify_days(interval)  interval  按照每月 30 天調整時間間隔  select justify_days(interval '35 days')  "1 mon 5 days"
 justify_hours(interval)  interval  按照每天 24 小時調整時間間隔  select justify_hours(interval '27 hours')  "1 day 03:00:00"
 justify_interval(interval)  interval  使用justify_daysjustify_hours調整時間間隔的同時進行正負號調整  select justify_interval(interval '1 mon -1 hour')  "29 days 23:00:00"
 localtime  time  當日時間;   select localtime  "22:29:47.906458"
 localtimestamp  timestamp  當前事務開始時的時間戳;  select localtimestamp  "2019-10-18 22:30:51.573436"
make_date(year intmonth intday int) date 為年、月和日字段創建日期 make_date(2013, 7, 15) 2013-07-15
now() timestamp with time zone 當前事務開始時的時間戳; select now() "2019-10-18 22:33:19.559465+08"
statement_timestamp()
timestamp with time zone
實時時鍾的當前時間戳; statement_timestamp() "2019-10-18 22:34:50.077578+08"
timeofday() text clock_timestamp相同,但結果是一個text 字符串; select timeofday() "Fri Oct 18 22:35:41.196317 2019 HKT"
transaction_timestamp() timestamp with time zone 當前事務開始時的時間戳; select transaction_timestamp() "2019-10-18 22:36:42.310184+08"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM