日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

【SQL编程】Greenplum 数据库通过 timestamp 类型字段值实现数据的(日期时段筛选+时间时段筛选)跨天时段及不跨天时段SQL详情

發(fā)布時(shí)間:2024/10/6 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SQL编程】Greenplum 数据库通过 timestamp 类型字段值实现数据的(日期时段筛选+时间时段筛选)跨天时段及不跨天时段SQL详情 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

why

最近在開(kāi)發(fā)數(shù)據(jù)中臺(tái)項(xiàng)目,其他平臺(tái)的部分業(yè)務(wù)要遷移到中臺(tái)實(shí)現(xiàn),其他平臺(tái)使用的數(shù)據(jù)庫(kù)是 MySQL、Oracle 而中臺(tái)使用的是 Greenplum 數(shù)據(jù)庫(kù),各個(gè)數(shù)據(jù)庫(kù)都有各自的函數(shù)和字段類(lèi)型,以下 SQL 是 MySQL 數(shù)據(jù)庫(kù)業(yè)務(wù)遷移至 GP 數(shù)據(jù)庫(kù)的轉(zhuǎn)換。

SQL

以下 SQL 使用了 4?? 個(gè)參數(shù),日期篩選字段參數(shù):startTime、endTime(格式 2021-10-11)和時(shí)段篩選字段參數(shù):startDuration、endDuration(格式 11:50:20)。

MySQL原始SQL

原MySQL數(shù)據(jù)庫(kù)SQL(去掉一部分與時(shí)段篩選無(wú)關(guān)的代碼)
主要使用的函數(shù)有 STR_TO_DATE、SUBSTRING、DATE_ADD、date_format 而這些 GP 數(shù)據(jù)都沒(méi)有

-- 不跨天 SELECT* FROMdata_bill b WHERESTR_TO_DATE ( b.call_time, '%Y-%m-%d' ) >= STR_TO_DATE ( #{startTime} , '%Y-%m-%d' ) AND STR_TO_DATE ( b.call_time, '%Y-%m-%d' ) <= STR_TO_DATE ( #{endTime} , '%Y-%m-%d' ) AND STR_TO_DATE ( SUBSTRING ( b.call_time, 12 ), '%H:%i:%s' ) >= STR_TO_DATE ( #{startDuration}, '%H:%i:%s' ) AND STR_TO_DATE ( SUBSTRING ( b.call_time, 12 ), '%H:%i:%s' ) <= STR_TO_DATE ( #{endDuration}, '%H:%i:%s' )-- 跨天 SELECT* FROMdata_bill b WHERESTR_TO_DATE ( b.call_time, '%Y-%m-%d' ) >= STR_TO_DATE ( #{startTime}, '%Y-%m-%d' ) AND STR_TO_DATE ( b.call_time, '%Y-%m-%d' ) <= STR_TO_DATE ( #{endTime} , '%Y-%m-%d' ) AND ((STR_TO_DATE ( SUBSTRING ( b.call_time, 12 ), '%H:%i:%s' ) >= STR_TO_DATE ( #{startDuration}, '%H:%i:%s' ) AND STR_TO_DATE ( SUBSTRING ( b.call_time, 12 ), '%H:%i:%s' ) <= STR_TO_DATE ( '23:59:59', '%H:%i:%s' ) ) OR (STR_TO_DATE (SUBSTRING ( date_format ( DATE_ADD ( STR_TO_DATE ( b.call_time, '%Y-%m-%d %H:%i:%s' ), INTERVAL 1 DAY ), '%Y-%m-%d %H:%i:%s' ), 12 ),'%H:%i:%s' ) >= STR_TO_DATE ( '00:00:00', '%H:%i:%s' ) AND STR_TO_DATE (SUBSTRING ( date_format ( DATE_ADD ( STR_TO_DATE ( b.call_time, '%Y-%m-%d %H:%i:%s' ), INTERVAL 1 DAY ), '%Y-%m-%d %H:%i:%s' ), 12 ),'%H:%i:%s' ) <= STR_TO_DATE ( #{endDuration}, '%H:%i:%s' ) ) )

Greenplum轉(zhuǎn)換后SQL

GP 數(shù)據(jù)庫(kù)轉(zhuǎn)換后的 SQL 主要使用了 date_trunc、to_date、SUBSTRING、CAST 函數(shù)
SUBSTRING 函數(shù)雖然名稱上跟 MySQL 一致 但是用法是不同的

-- 不跨天 SELECT* FROMdata_bill WHEREdate_trunc( 'DAY', call_time ) >= to_date( #{startTime}, 'yyyy-mm-dd' ) AND date_trunc( 'DAY', call_time ) <= to_date( #{endTime}, 'yyyy-mm-dd' ) AND call_time >= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || #{startDuration} AS TIMESTAMP ) AND call_time <= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || #{endDuration} AS TIMESTAMP ) -- 跨天 SELECT* FROMdata_bill WHEREdate_trunc( 'DAY', call_time ) >= to_date( #{startTime}, 'yyyy-mm-dd' ) AND date_trunc( 'DAY', call_time ) <= to_date( #{endTime}, 'yyyy-mm-dd' ) AND ((call_time >= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || #{startDuration} AS TIMESTAMP ) AND call_time <= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || '23:59:59' AS TIMESTAMP ) ) OR (call_time >= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || '00:00:00' AS TIMESTAMP ) AND call_time <= CAST ( SUBSTRING ( '' || call_time FROM 0 FOR 12 ) || #{endDuration} AS TIMESTAMP ) ) )

總結(jié)

以上是生活随笔為你收集整理的【SQL编程】Greenplum 数据库通过 timestamp 类型字段值实现数据的(日期时段筛选+时间时段筛选)跨天时段及不跨天时段SQL详情的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。