域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過
PostgreSql 實(shí)現(xiàn)的hash_code 函數(shù)與java hash_code方法一致
CREATE FUNCTION hash_code(text) RETURNS integer
LANGUAGE plpgsql
AS
$$
DECLARE
i integer := 0;
DECLARE
h bigint := 0;
BEGIN
FOR i IN 1..length($1)
LOOP
h = (h * 31 + ascii(substring($1, i, 1))) & 4294967295;
END LOOP;
RETURN cast(cast(h AS bit(32)) AS int4);
END;
$$;
補(bǔ)充:PGSQL的某些常用函數(shù)
一、COALESCE(col,value);
COALESCE函數(shù)的作用是空值替換函數(shù),即當(dāng)某列的值為空時(shí),則可用其他值進(jìn)行替換,再返回給前端。
eg:COALESCE(totalnum,0);即當(dāng)字段名為totalnum的列的值為空時(shí),則用0進(jìn)行替換,進(jìn)行替換的值可根據(jù)實(shí)際情況可用number類型,也可用varchar類型等。
二、regexp_split_to_table(col,',');
regexp_split_to_table函數(shù)的作用是利用正則表達(dá)式將字符串分割成表格。即將對(duì)指定列的值進(jìn)行分割,分割后的每個(gè)子串將轉(zhuǎn)成一行,多個(gè)子串將轉(zhuǎn)成多行。如下圖所示:
因此鑒于以上的功能,在實(shí)際開發(fā)中可以用于多類型,多狀態(tài)或者多形式的條件查詢,例如--如下圖所示:
其中的'00,10,11,98'是可以由前端傳過來(lái)封裝好的字符串變量,這種做法比用循環(huán)取出,再封裝成"'00','10','11','98'"這種形式的字符串方便了許多。
三、regexp_split_to_array(col,',');
regexp_split_to_array是將某一字段的值以特定的符號(hào)進(jìn)行分割后轉(zhuǎn)換為數(shù)組的格式,入下圖所示
四、string_agg
直接把一個(gè)表達(dá)式或者某一列的字段合并變成字符串
格式--string_agg(expression,delimiter order by expression)
第一個(gè)參數(shù)表示需要合并的字段或者表達(dá)式。
第二個(gè)參數(shù)表示以什么符號(hào)進(jìn)行將第一個(gè)參數(shù)進(jìn)行鏈接起來(lái),一般都是使用','。
第三個(gè)參數(shù)為可選項(xiàng),表示將第一列的字段以怎樣的排序進(jìn)行合并。
示例:
1string_agg(f_b_getusername(r.userid),',' order by r.crt_time desc) as mjxms
注:第二個(gè)參數(shù)與第三個(gè)參數(shù)之間不需要逗號(hào)進(jìn)行隔離,只需要空格就行,甚至不需要空格!
五、substring(string [from int] [for int])
1substring('abcdefg' from 2 for 3) = bcd
第一個(gè)參數(shù)是需要被截取的字符串,第二個(gè)參數(shù)是從第幾位開始截取,起始位置是1,第三個(gè)參數(shù)表示截取的長(zhǎng)度。
六、獲取當(dāng)前日期是星期幾
1SELECT extract(dow FROM cast(now() as TIMESTAMP))
將dow換成day就是獲取當(dāng)前日期是當(dāng)前月份的第幾天
七、將日期轉(zhuǎn)換成 INTERVAL 格式
1select age('2019-10-10','2018-04-19')
可計(jì)算兩個(gè)日期之間相差多少日期
文章來(lái)源:腳本之家
來(lái)源地址:https://www.jb51.net/article/205231.htm
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!