第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

人字或數(shù)字混合字符串的人性化或自然數(shù)排序

人字或數(shù)字混合字符串的人性化或自然數(shù)排序

陪伴而非守候 2019-10-30 10:15:17
跟隨Sivaram Chintalapudi 提出的這個(gè)問(wèn)題,我對(duì)在PostgreSQL中對(duì)包含多位數(shù)字和單詞/字母的混合字符串進(jìn)行自然(或“人性化”)排序 “ 是否可行”感興趣,沒(méi)有固定的解決方案字符串中的單詞和數(shù)字的模式,并且字符串中可能有多個(gè)多位數(shù)字。我唯一看到的常規(guī)操作是在Mac OS的Finder中,它對(duì)包含混合數(shù)字和單詞的文件名進(jìn)行自然排序,將“ 20”放在“ 3”之后,而不是在它之前。所需的排序規(guī)則順序?qū)⒂梢环N算法產(chǎn)生,該算法將每個(gè)字符串在字母數(shù)字邊界處拆分為多個(gè)塊,然后對(duì)每個(gè)部分進(jìn)行排序,將具有常規(guī)排序規(guī)則的字母塊和數(shù)字塊視為用于排序目的的整數(shù)。所以:'AAA2fred'將成為('AAA',2,'fred')和'AAA10bob'將成為('AAA',10,'bob')。然后可以根據(jù)需要對(duì)它們進(jìn)行排序:regress=# WITH dat AS ( VALUES ('AAA',2,'fred'), ('AAA',10,'bob') )regress-# SELECT dat FROM dat ORDER BY dat;     dat      -------------- (AAA,2,fred) (AAA,10,bob)(2 rows)與通常的字符串排序規(guī)則相比:regress=# WITH dat AS ( VALUES ('AAA2fred'), ('AAA10bob') )regress-# SELECT dat FROM dat ORDER BY dat;    dat     ------------ (AAA10bob) (AAA2fred)(2 rows)但是,記錄比較方法不能一概而論,因?yàn)镻g不會(huì)比較ROW(..)構(gòu)造或條目數(shù)不相等的記錄。給定此SQLFiddle中的樣本數(shù)據(jù),默認(rèn)的en_AU.UTF -8排序規(guī)則將產(chǎn)生順序:1A, 10A, 2A, AAA10B, AAA11B, AAA1BB, AAA20B, AAA21B, X10C10, X10C2, X1C1, X1C10, X1C3, X1C30, X1C4, X2C1但我想要:1A, 2A, 10A, AAA1BB, AAA10B, AAA11B, AAA20B, AAA21B, X1C1, X1C3, X1C4, X1C10, X1C30, X2C1, X10C10, X10C2目前,我正在使用PostgreSQL 9.1,但是僅9.2的建議會(huì)很好。我對(duì)如何實(shí)現(xiàn)有效的字符串拆分方法以及如何在上述交替的字符串-然后-數(shù)字排序規(guī)則中比較生成的拆分?jǐn)?shù)據(jù)的建議感興趣。或者,當(dāng)然,在不需要分割字符串的完全不同且更好的方法上。PostgreSQL似乎不支持比較器功能,否則可以使用遞歸比較器以及諸如ORDER USING comparator_fn和comparator(text,text)函數(shù)之類的方法輕松完成。syntax,這種語(yǔ)法是虛構(gòu)的。
查看完整描述

3 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

稍后添加此答案是因?yàn)榭雌饋?lái)其他所有人似乎都在將其分解為數(shù)組或類似的數(shù)組。似乎過(guò)多。


CREATE FUNCTION rr(text,int) RETURNS text AS $$

SELECT regexp_replace(

    regexp_replace($1, '[0-9]+', repeat('0',$2) || '\&', 'g'), 

    '[0-9]*([0-9]{' || $2 || '})', 

    '\1', 

    'g'

)

$$ LANGUAGE sql;


SELECT t,rr(t,9) FROM mixed ORDER BY t;

      t       |             rr              

--------------+-----------------------------

 AAA02free    | AAA000000002free

 AAA10bob     | AAA000000010bob

 AAA2bbb03boo | AAA000000002bbb000000003boo

 AAA2bbb3baa  | AAA000000002bbb000000003baa

 AAA2fred     | AAA000000002fred

(5 rows)


(reverse-i-search)`OD': SELECT crypt('richpass','$2$08$aJ9ko0uKa^C1krIbdValZ.dUH8D0R0dj8mqte0Xw2FjImP5B86ugC');

richardh=> 

richardh=> SELECT t,rr(t,9) FROM mixed ORDER BY rr(t,9);

      t       |             rr              

--------------+-----------------------------

 AAA2bbb3baa  | AAA000000002bbb000000003baa

 AAA2bbb03boo | AAA000000002bbb000000003boo

 AAA2fred     | AAA000000002fred

 AAA02free    | AAA000000002free

 AAA10bob     | AAA000000010bob

(5 rows)

我并不是說(shuō)兩個(gè)正則表達(dá)式是執(zhí)行此操作的最有效方法,但是rr()是不可變的(對(duì)于固定長(zhǎng)度),因此您可以對(duì)其進(jìn)行索引。哦-這是9.1


當(dāng)然,使用plperl,您只需評(píng)估一下替換物即可一次性填充/修剪。但是,有了perl,您總是擁有比其他任何方法都更多的選擇(TM):-)


查看完整回答
反對(duì) 回復(fù) 2019-10-30
  • 3 回答
  • 0 關(guān)注
  • 566 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)