フィールドを完成させるために「0」を使用する SQL の一部の関数およびメソッドは、GP ライブラリでは適用できません。
1. 左詰め '0' 関数:
Lpad ('A', B, '0')
例: select Ipad (dingdan, 8, '0')
注: dingdan フィールドが 8 桁未満の場合、左側は自動的に 0 が入力され、8 ビット長になります A がフィールドの場合は一重引用符を追加する必要はありません 数値の場合は一重引用符が必要です 2. 右補数 '0'
関数
Rpad ('A', B, '0')
と Ipad () 関数の使い方は同じですが、あまり説明する必要はありません。
3. プレフィックス「0」を削除します。
ltrim 関数
使用法:
ltrim('0000150','0')
効果:
4. サフィックス「0」を削除します
。rtrim 関数
の使用法:
select rtrim('150000000', '0')
PostgreSQL の時間タイプには次のものがあります。
-
date: yyyy-mm-dd の形式で日付を表します。
-
time: hh:mm:ss の形式で時刻を示します。
-
タイムスタンプ: 日付と時刻を yyyy-mm-dd hh:mm:ss の形式で表します。
-
間隔: 時間間隔を表します。形式は「1 日 1 時間」です。
-
timestamptz: タイムゾーン付きの日付と時刻を yyyy-mm-dd hh:mm:ss TZ の形式で表します。
時刻タイプの書式設定には、TO_CHAR 関数を使用できます。例えば:
-
TO_CHAR(date_field, 'YYYY/MM/DD') date_field を yyyy/mm/dd の形式に変換します。
-
TO_CHAR(time_field, 'HH12:MI:SS AM') time_field を hh:mm:ss AM/PM の形式に変換します。
-
TO_CHAR(timestamp_field, 'YYYY-MM-DD HH24:MI:SS') timestamp_field を yyyy-mm-dd hh:mm:ss の形式に変換します。
-
TO_CHAR(interval_field, 'HH24:MI') interval_field を hh:mm 形式に変換します。
-
TO_CHAR(timestamptz_field, 'YYYY-MM-DD HH:MI:SS TZ') timestamptz_field を yyyy-mm-dd hh:mm:ss TZ の形式に変換します。
TO_CHAR 関数に加えて、CAST 関数を使用して時刻型を文字列型に変換し、形式をカスタマイズすることもできます。例えば:
-
CAST(date_field AS text) date_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。
-
CAST(time_field AS text) は、time_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。
-
CAST(timestamp_field AS text) timestamp_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。
-
CAST(interval_field AS text) interval_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。
-
CAST(timestamptz_field AS text) timestamptz_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。
文字列整形関数のパラメータは標準の整形文字列とは異なりますので、使用方法についてはPostgreSQLのドキュメントを参照してください。
1. まず、システムには 4 つのデフォルト関数があり、最初の 2 つは日付 + 時刻、後者は個別の日付関数と個別の時刻です。
– 標準時刻関数
select now();
2022-01-04 10:31:26.435501+08
– 標準時刻関数、now() と同じ
select current_timestamp;
2022-01-04 10:31:33.679012+08
– 標準日付
選択current_date ;
2022-01-04
– 標準時刻
を選択 current_time;
10:31:47.180718+08
2. 時間の計算。ここでは、現在時刻を基に来月や来週などの時刻を計算することができます。個人的には、時間の加減算には current_date (純粋な日付、見やすい) を使用するのが好きです。 キーワードの間隔 (間隔の意味)ですが、今使う場合は追加する必要はありません!!!
– 現在の日付 + 日
select current_date,current_date + 間隔 ‘1 日’;
2022-01-04 2022-01-05 00:00:00
– 現在の日付 + 週
select current_date,current_date + 間隔 ‘1 週間’;
2022-01 -04 2022-01-11 00:00:00
– 現在の日付 + 1 か月
select current_date,current_date + 間隔 '1 か月';
2022-01-04 2022-02-04 00:00:00
– 現在の日付 + 1 年
select current_date,current_date + 間隔 '1 年';
2022-01-04 2023-01-04 00:00:00
– now、現在時刻 + 1 日を使用します。他のオプションにも同じことが当てはまります
select now(), now() + period '1 day';
2022-01-04 10:43:14.587596+08 2022-01-04 10: 43:14.587596 +08
select now(),now() + ' 1 year';
2022-01-04 10:43:14.587596+08 2023-01-04 10:43:14.587596+08
PS: 強力な包括性、計算時間他の 2 つの式を使用することもでき、時間も大文字と小文字を無視します。これは素晴らしいことです。!
時間の標準略語 奇数
年 Y 年
月 M 月
週 W 週 日
D 日
時 H 時
分 分 M
分秒 S 秒
select current_time,current_time + 間隔 '1 時間';
10:36:49.929987+08 11:36:49.929987+08
select current_time,current_time + 間隔 '1 分',current_time + 間隔 '1 分';
10:37:16.843502+ 08 10:38:16.843502+08 10:38:16.843502+08
3. 高度な時間機能の場合、前月末の特定の日、または毎日 2:20 などのクエリが頻繁に発生します。
–現在の日付、今年の最初の日、前年の最後の日
select current_date,date_trunc('year', current_date), date_trunc('year', current_date) - 間隔 '1 day';
2022-01-04 2022-01 -01 00:00:00+08 2021-12-31 00:00:00+08
– 現在の日付、今月の初日、前月の末日
select current_date,date_trunc('month', current_date), date_trunc('month ', current_date) - 間隔 '1 day';
2022-01-04 2022-01-01 00:00:00+08 2021-12-31 00:00:00+08
– 現在の日付、今日 2:20
select current_date ,current_date + 間隔 '2 時間' + 間隔 '20 M';
2022-01-04 2022-01-04 02:20:00
4. 基本スキル、時間を文字列に変換する
select to_char(now(),'YYYY-MM-DD HH24:MI:SS'),To_char(now(),'yyyy-mm-dd hh24:mi:ss');
2022-01-04 11:14:39 2022-01-04 11:14:39
select to_char(current_timestamp,'YYYY-MM-DD HH24:MI:SS'),to_char(current_timestamp,'HH24:MI:SS' );
2022-01-04 11:14:50 11:14:50
select to_char(current_date,'YYYY-MM-DD HH24:MI:SS');
2022-01-04 00:00:00
現在のシステム時刻を取得します
select now();
select current_timestamp;
結果: 2020-11-04 16:09:53.247825+08
1
2
3
現在の日付または時刻を取得します
select current_date;
結果: 2020-11-04
1
2
select current_time ;
結果 :16:14:08.501182+08
1
2
昨日のデータをクエリ
select
DISTINCT count(id)
from
table name
where coalesce(l.join_date,l.sys_createdate) >= current_date - 1;
ここでの合体関数、構文: coalesce(expr1,expr2,expr3…)
最初のフィールドが存在する場合は、最初のフィールドを式の判断に使用します。
最初のものが存在せず、null の場合、2 番目のものが式の判断に使用されます。
nullがない場合はnullを返す
1
2
3
4 5
6
7
8
9
10Query
Monday
SELECT
( DATE '2020-10-23' - INTERVAL '1 day' - ( EXTRACT ( dow FROM ( DATE '2020-10-23' - INTERVAL ' 1 day' ) ) - 1 || '日' ) :: 間隔 ) :: 日付;
月曜日が週の始まりなので 1 を引きます。
1
2
今週のデータをクエリする
SELECT( DATE ( now() ) - ( EXTRACT ( dow FROM DATE ( now() ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE startasy, ( DATE ( now (
) ) - ( EXTRACT ( dow FROM DATE ( now() ) ) - 1 || ' day' ) :: INTERVAL ) :: DATE + 6 endday
from テーブル名 LIMIT 1;
1
2
3
今週の最後の日
SELECT to_char(CURRENT_DATE +cast(-1*(TO_NUMBER(to_char(CURRENT_DATE,'D'),'99')-2) + 6 ||' 日' 間隔),'yyyy-mm-dd');
6 日を追加すると日曜日を意味し、追加しない場合は週の最初の日を意味します。
1
2
今月、方法 1
select to_char((SELECT now() as timestamp),'mm');
1
今月、方法 2
select * from table name where time >= date_trunc('month', now());
1
先月の取得
select to_char((select now() - 間隔 '1 month'),'mm');
1
今年の取得
select to_char((SELECT now() as timestamp),'yyyy')
1
昨年の取得
select to_char( (select now() - 間隔 '1 years'),'yyyy')
1
(補足) 過去 12 か月または今年のデータを取得します
WITH RECURSIVE T (n) AS (
SELECT DATE(to_char( to_date('2022) -08 ', 'yyyy-MM-dd') - 間隔 '11 月', 'yyyy-MM-dd' ))
UNION ALL
SELECT
n + 1
FROM
T
WHERE
n < DATE( to_char( to_date('2022-08', 'yyyy-MM-dd'), 'yyyy-MM-dd' ) ) ) SELECT to_char( n, 'yyyy
-
MM' ) AS MONTH
FROM T
GROUP BY
月ごとに注文
月が 2022-12 に変更されている限り、今年内のすべての月をクエリすることになります。
1
2
3
4 5
6
7
8
9
10
11
12 13 14 15 (補足) 過去 1 か月のすべての日のデータを取得WITH RECURSIVE T ( n ) AS (
SELECT DATE ( to_char( now( ) - INTERVAL '30 day' , 'yyyy-MM-dd' ) ) UNION ALL SELECT n + 1 FROM T WHERE n < DATE ( to_char( now( ), 'yyyy-MM-dd' ) ) ) SELECT to_char( n, 'yyyy-MM-dd ' ) Tグループからの日数日数ごとに注文1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
(補足)先月の各日のデータを取得する(No.1~31)
SELECTgenerate_series
(
date_trunc( '月', CURRENT_DATE - 間隔 '1か月'),
date_trunc( '月', CURRENT_DATE) - 間隔 '1 day',
'1 d' :: INTERVAL
) :: DATE days
1
2
3
4
5
6
(補足) 今月の各日のデータを取得します (No. 1 ~ 31)
SELECTgenerate_series
(
date_trunc ( 'month', CURRENT_DATE ),
date_trunc( 'month', CURRENT_DATE) + '1 month -1d',
'1 d' :: INTERVAL
) :: DATE days
1
2
3
4
5
6
時刻間の 2 番目の差を取得します
SELECTround(date_part('epoch', TIMESTAMP '2022-08-15 17:00:10' - TIMESTAMP '2022-08-15 17:00:00'));
結果: 10
1
2
時刻間の分数を取得します。
SELECTround(date_part('epoch', TIMESTAMP '2022-08-15 17:10:10' - TIMESTAMP '2022-08-15 17:00:00')/60);
結果: 10
1
2
時刻を取得します。 SELECT間の時間差
round(date_part('epoch', TIMESTAMP '2022-08-15 19:10:10' - TIMESTAMP '2022-08-15 17:00:00')/60/60);
結果: 2