sql查詢語句大全及實例「sql語句獲取當前時間的函數」

今天是SQL知識大全的第五講,主要內容是和時間函數相關,主要包括了常用的時間函數,時間提取函數,時間計算函數以及時間和時間戳之間的轉換。

SQL知識大全(五):SQL中的時間函數

常用的時間函數

to_date()函數

to_date()函數將字符串的日期轉換為時間格式的日期,轉換後的時間格式可以是如下形式:

格式
意義
YEAR 年的拼寫MM 數字月MONTH 月的全拼MON 月的縮寫DD 數字日DAY 星期的全拼DY 星期的縮寫AM 表示上午或者下午HH24、HH12 12小時制或24小時制‍MI 分鐘‍‍SS 秒鐘‍‍‍

具體示例如下:

SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL


SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL


SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL


SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL


SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL


SELECT TO_DATE('2006', 'YYYY') FROM DUAL

current_date()/current_time()

返回當前時間,某年某月某日,current_time()等同於current_date。

SELECT CURDATE()# 返回值:
# '2020-10-09'

current_timestamp()

current_timestamp()相當於now(),返回當前的時間戳。

時間提取

時間提取函數包括year(),month(),day(),hour(),minute(),second()等,其用法都是一直的,這些函數分別返回 date 的年份,月份,日期,時間等,範圍為1000-9999。當 date 為0時,返回0。

具體示例如下:

SELECT YEAR('98-02-03')
# 返回值  1998
SELECT MONTH('98-02-03')
# 返回值  02
SELECT DAY('98-02-03')
# 返回值  3

時間計算函數

DATEDIFF()

語法:DATEDIFF(expr1,expr2)

DATEDIFF()將返回expr1 – expr2的值,用來表示兩個日期相差的天數。expr1 和 expr2 都是日期或日期時間表達式。運算中只用到了這些值的日期部分。

SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30')


#返回結果
1

date_sub()/date_add()

語法格式:

DATE_ADD(date,INTERVAL expr unit)

DATE_SUB(date,INTERVAL expr unit)

執行日期計算的兩種函數。date 是一個用來指定開始日期的 DATETIME 或 DATE 值。expr 是一種以字符串形式呈現的表達式,用來指定從開始日期增加或減少的間隔值。如果是負的間隔值,則 expr 值的第一個字符是-號。unit 是一個單位關鍵字,用來指定expr表達式應該採取的單位。

INTERVAL 關鍵字與單位說明符都不區分大小寫。

下表列出了每個單位數值所對應的 expr 參數的期望格式。

單位所能取的值期望的expr格式MICROSECOND毫秒SECOND秒MINUTE分HOUR小時DAY日WEEK周MONTH月QUARTER季度YEAR年SECOND_MICROSECOND’秒.毫秒’MINUTE_MICROSECOND’分.毫秒’MINUTE_SECOND’分:秒’HOUR_MICROSECOND’小時.毫秒’HOUR_SECOND’小時:分:秒’HOUR_MINUTE’小時:分’DAY_MICROSECOND’日.毫秒’DAY_SECOND’日 小時:分:秒’DAY_MINUTE’日 小時:分’DAY_HOUR’日 小時’YEAR_MONTH’年-月’

時間戳

時間戳的定義

時間戳是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。

UNIX時間戳的0按照ISO 8601規範為 :1970-01-01T00:00:00Z.

一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。

在大多數的UNIX系統中UNIX時間戳存儲為32位,這樣會引發2038年問題或Y2038。

UNIX_TIMESTAMP(date)

若無參數調用,則返回一個 Unix timestamp (‘1970-01-01 00:00:00’ GMT 之後的秒數) 作為無符號整數,得到當前時間戳 。

若用date 來調用 UNIX_TIMESTAMP(),它會將參數值以’1970-01-01 00:00:00′ GMT後的秒數的形式返回。date 可以是一個 DATE 字符串、一個 DATETIME字符串、一個 TIMESTAMP或一個當地時間的YYMMDD或YYYMMDD格式的數字。

例如:

SELECT UNIX_TIMESTAMP() ; (執行時的時間:2009-08-06 10:10:40)
# 1249524739


SELECT UNIX_TIMESTAMP('2009-08-06') ;
# 1249488000

from_unixtime()

from_unixtime(t1,’yyyy-MM-dd HH:mm:ss’)

其中t1是10位的時間戳值,即1970-1-1至今的秒,而13位的所謂毫秒的是不可以的。

對於13位時間戳,需要截取,然後轉換成bigint類型,因為from_unixtime類第一個參數只接受bigint類型。例如:

select from_unixtime(cast(substring(tistmp,1,10) as bigint),’yyyy-MM-dd HH’) tim ,count(*) cn from ttengine_hour_data 
where …


SELECT from_unixtime(cast(ts AS bigint))
FROM temptable

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/268158.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:07
下一篇 2024-12-16 13:07

相關推薦

發表回復

登錄後才能評論