使用PostgreSQL註意事項

来源:https://www.cnblogs.com/zhanglingbing/archive/2020/04/01/12610941.html
-Advertisement-
Play Games

一、大小寫特別敏感 大寫欄位需要用“”引號(pg欄位名使用“”,MySQL欄位名使用``) ******表名以及欄位名如果是小寫但是為關鍵字,比如name,則也需使用""; 二、分頁 limit ${limit} offset ${start} 三、判斷條件等號前後欄位類型需要一致 類型轉換相關函數 ...


一、大小寫特別敏感

大寫欄位需要用“”引號(pg欄位名使用“”,MySQL欄位名使用``)

 ******表名以及欄位名如果是小寫但是為關鍵字,比如name,則也需使用"";

二、分頁

limit ${limit} offset ${start}

 

三、判斷條件等號前後欄位類型需要一致

類型轉換相關函數

pg使用文檔:https://www.runoob.com/postgresql/postgresql-functions.html

函數

返回類型

描述

實例

to_char(timestamp, text)

text

將時間戳轉換為字元串

to_char(current_timestamp, 'HH12:MI:SS')

to_char(interval, text)

text

將時間間隔轉換為字元串

to_char(interval '15h 2m 12s', 'HH24:MI:SS')

to_char(int, text)

text

整型轉換為字元串

to_char(125, '999')

to_char(double precision, text)

text

雙精度轉換為字元串

to_char(125.8::real, '999D9')

to_char(numeric, text)

text

數字轉換為字元串

to_char(-125.8, '999D99S')

to_date(text, text)

date

字元串轉換為日期

to_date('05 Dec 2000', 'DD Mon YYYY')

to_number(text, text)

numeric

轉換字元串為數字

to_number('12,454.8-', '99G999D9S')

to_timestamp(text, text)

timestamp

轉換為指定的時間格式 time zone convert string to time stamp

to_timestamp('05 Dec 2000', 'DD Mon YYYY')

to_timestamp(double precision)

timestamp

把UNIX紀元轉換成時間戳

to_timestamp(1284352323)

四、日期格式轉換(格式跟oracle類似)

eg:

時間轉字元串:to_char(now(),'yyyy-mm-dd hh24:mi:ss');

占位符

描述

HH

一天的小時數(01-12)

HH12

一天的小時數(01-12)

HH24

一天的小時數(00-23)

MI

分鐘(00-59)

SS

秒(00-59)

MS

毫秒(000-999)

US

微秒(000000-999999)

AM

正午標識(大寫)

Y,YYY

帶逗號的年(4和更多位)

YYYY

年(4和更多位)

YYY

年的後三位

YY

年的後兩位

Y

年的最後一位

MONTH

全長大寫月份名(空白填充為9字元)

Month

全長混合大小寫月份名(空白填充為9字元)

month

全長小寫月份名(空白填充為9字元)

MON

大寫縮寫月份名(3字元)

Mon

縮寫混合大小寫月份名(3字元)

mon

小寫縮寫月份名(3字元)

MM

月份號(01-12)

DAY

全長大寫日期名(空白填充為9字元)

Day

全長混合大小寫日期名(空白填充為9字元)

day

全長小寫日期名(空白填充為9字元)

DY

縮寫大寫日期名(3字元)

Dy

縮寫混合大小寫日期名(3字元)dy縮寫小寫日期名(3字元)

DDD

一年裡的日子(001-366)

DD

一個月里的日子(01-31)

D

一周里的日子(1-7;周日是1)

W

一個月里的周數(1-5)(第一周從該月第一天開始)

WW

一年裡的周數(1-53)(第一周從該年的第一天開始)

 

轉時間格式

to_date( #{req_tm},'yyyy-mm-dd')

 

select now()::varchar(19);

 

select cast( '2018-03-22 06:15:16'as timestamp)

函數

返回類型

描述

例子

to_char(timestamp, text)

text

把時間戳轉換成字串

to_char(current_timestamp, 'HH12:MI:SS')

to_char(interval, text)

text

把時間間隔轉為字串

to_char(interval '15h 2m 12s', 'HH24:MI:SS')

to_char(int, text)

text

把整數轉換成字串

to_char(125, '999')

to_char(double precision, text)

text

把實數/雙精度數轉換成字串

to_char(125.8::real, '999D9')

to_char(numeric, text)

text

把numeric轉換成字串

to_char(-125.8, '999D99S')

to_date(text, text)

date

把字串轉換成日期

to_date('05 Dec 2000', 'DD Mon YYYY')

to_timestamp(text, text)

timestamp

把字串轉換成時間戳

to_timestamp('05 Dec 2000', 'DD Mon YYYY')

to_timestamp(double)

timestamp

把UNIX紀元轉換成時間戳

to_timestamp(200120400)

to_number(text, text)

numeric

把字串轉換成numeric

to_number('12,454.8-', '99G999D9S')

五、實現MySQL中的GROUP_CONCAT()方法

使用:array_to_string(GROUP_CONCAT(DISTINCT cgu.group_id),',')

創建自定義聚合函數

CREATE AGGREGATE group_concat(anyelement)

(

sfunc = array_append, -- 每行的操作函數,將本行append到數組裡

stype = anyarray, -- 聚集後返回數組類型

initcond = '{}' -- 初始化空數組

);

 

六、null替換

coalesce(pmodule_id,'')

 

七、模糊查詢

SELECT * FROM public."user"

WHERE UPPER(username) LIKE UPPER('%' || #{username} || '%');

 

SELECT * FROM public."user"

WHERE CONCAT(username) LIKE CONCAT('%', #{username}, '%');

 

SELECT * FROM public."user"

WHERE username LIKE '%' || #{username} || '%';

 

八、實現MySQL中的主鍵自增功能

為欄位添加自增功能時需要創建序列

 

--創建序列欄位自增

CREATE SEQUENCE imp_item_status_map_seq --序列名

START WITH 200 --起始值

INCREMENT BY 1 --增量

NO MINVALUE

NO MAXVALUE

CACHE 1;

--刪除序列

DROP SEQUENCE imp_item_status_map_seq cascade;

--將表中欄位關聯序列

--mapping_id 需要關聯表中的欄位

alter table imp_item_status_map alter column mapping_id set default nextval('imp_item_status_map_seq');

 

九、

--創建類似UUID()函數方法

create or replace function random_string(integer)

returns text as

$body$

select array_to_string(array(select substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' FROM (ceil(random()*62))::int FOR 1) FROM generate_series(1, $1)), '');

$body$

language sql volatile;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隨著互聯網的高速發展,傳統的關係資料庫(如MySQL、Microsoft SQL Server等)已不能滿足日益增長的業務需求,如商品秒殺、搶購等及時性非常強的功能,隨著應用高併發的訪問,會造成系統資料庫崩潰,為瞭解決此種情況,需要引用一個緩存中間件,市面上比較常用的緩存中間件有Redis 和 Me... ...
  • 鏈接:https://blog.csdn.net/qq_41059374/article/details/80695581?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.no ...
  • 一個字元類型的、一個int類型的,查詢的時候到底會不會走索引,其實很多工作了幾年的開發人員有時也會暈,下麵就用具體事例來測試一下。 1. 準備工作 先準備2張表,以備後續測試使用。 表1:創建表test1,總共3列,其中id 是主鍵(int),c_no 為int型,且有索引,c_2為普通欄位 /*創 ...
  • 鏈接1:https://blog.csdn.net/u012453843/article/details/70878117 鏈接2:https://www.cnblogs.com/niunafei/p/11294560.html ...
  • 事情的起因呢,是因為朋友問我的。幾經周折,自己粗心大意了很多細節,不廢話,直接開始 一、redis的安裝我就略過了, 二、修改redis的配置文件 redis.conf 1. bind 設置為 0.0.0.0 2. protected-mode 設置為no (也就是關閉保護模式) 3. daemon ...
  • Mybatis 的 Mapper.xml 語句中 parameterType 向SQL語句傳參有兩種方式:\ { } 和 ${ }。 使用\ { }是來防止SQL註入,使用${ }是用來動態拼接參數。 如何排查出 1. 檢查是否有\$號 如果你使用的是ide代碼編輯器,那麼可以通過全局搜索 , 快速 ...
  • 探索資料庫內部存儲數據存儲結構,將從資料庫內部如何存儲數據,索引數據如何存儲,操作數據對存儲影響,最後總結。 ...
  • 127.0.0.1:6379> info [server|clients|memory|stats|...] # Server redis_version:5.0.4 #redis版本 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id: ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...