pgsql関数

フィールドを完成させるために「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 の時間タイプには次のものがあります。

  1. date: yyyy-mm-dd の形式で日付を表します。

  2. time: hh:mm:ss の形式で時刻を示します。

  3. タイムスタンプ: 日付と時刻を yyyy-mm-dd hh:mm:ss の形式で表します。

  4. 間隔: 時間間隔を表します。形式は「1 日 1 時間」です。

  5. timestamptz: タイムゾーン付きの日付と時刻を yyyy-mm-dd hh:mm:ss TZ の形式で表します。

時刻タイプの書式設定には、TO_CHAR 関数を使用できます。例えば:

  1. TO_CHAR(date_field, 'YYYY/MM/DD') date_field を yyyy/mm/dd の形式に変換します。

  2. TO_CHAR(time_field, 'HH12:MI:SS AM') time_field を hh:mm:ss AM/PM の形式に変換します。

  3. TO_CHAR(timestamp_field, 'YYYY-MM-DD HH24:MI:SS') timestamp_field を yyyy-mm-dd hh:mm:ss の形式に変換します。

  4. TO_CHAR(interval_field, 'HH24:MI') interval_field を hh:mm 形式に変換します。

  5. TO_CHAR(timestamptz_field, 'YYYY-MM-DD HH:MI:SS TZ') timestamptz_field を yyyy-mm-dd hh:mm:ss TZ の形式に変換します。

TO_CHAR 関数に加えて、CAST 関数を使用して時刻型を文字列型に変換し、形式をカスタマイズすることもできます。例えば:

  1. CAST(date_field AS text) date_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。

  2. CAST(time_field AS text) は、time_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。

  3. CAST(timestamp_field AS text) timestamp_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。

  4. CAST(interval_field AS text) interval_field を文字列型に変換し、文字列書式設定関数を使用して書式設定します。

  5. 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

おすすめ

転載: blog.csdn.net/weixin_45163291/article/details/132084731