1.數據修復最先考慮通過db內做修復,實在不行,在考慮外部應用程序通過jdbc修復.
比如一個場景:profile_image_url與enlarge_image_url都是微博用戶信息返回的字段. 前者是http://tp2.sinaimg.cn/1928431341/50/5621497131/1,后者正常情況是http: //tp2.sinaimg.cn/1928431341/180/5621497131/1, 此時如果修復后者的數據,只需將/50/替換成/180/,只需通過postgres的字符函數解決。
?
2.常用函數
2.1常用字符串函數列表
注意, 下頁的示例中字符串都是可以用表中的字段替代.? 測試函數可以類似 select "char_length"('string');? *標識不常用, 字符串在任何庫的函數最主要的不過就是substring, position, length, replace幾種,類似于db的CRUD。
?
函數:string || string
說明:String concatenation 字符串連接操作
例子:'Post' || 'greSQL' = PostgreSQL
?
函數:string || non-string or non-string || string
說明:String concatenation with one non-string input 字符串與非字符串類型進行連接操作
例子:'Value: ' || 42 = Value: 42
?
函數:bit_length(string)
說明:Number of bits in string 計算字符串的位數
例子:bit_length('jose') = 32
?
函數:char_length(string) or character_length(string)
說明:Number of characters in string 計算字符串中字符個數
例子:char_length('jose') = 4
與length一樣
select "char_length"('string'),"length"('string');? res: 6 6
函數:lower(string)
說明:Convert string to lower case 轉換字符串為小寫
例子:select "lower"('ABC') =abc
?
函數:octet_length(string)
說明:Number of bytes in string 計算字符串的字節數
例子:octet_length('jose') = 4
函數:overlay(string placing string from int [for int])
說明:Replace substring 替換字符串中任意長度的子字串為新字符串
例子:overlay('Txxxxas' placing 'hom' from 2 for 4) = 4
又比如要將'http://tp2.sinaimg.cn/1928431341/50/5621497131/1'中的/50/替換成/180/,可以使用的方法:
1.
update t_sns_member? set? enlarge_image_url= overlay(profile_image_url placing '/180/' from position('/50/' in profile_image_url) for 4)? where enlarge_image_url=''
2.不使用替換,substring+position+||去拼新串
update t_sns_member? set? enlarge_image_url=substring(profile_image_url,0,position('/50/' in profile_image_url))||'/180/'||substring(profile_image_url,position('/50/' in profile_image_url)+4,char_length(profile_image_url)) where enlarge_image_url='';
函數:position(substring in string)
說明:Location of specified substring 子串在一字符串中的位置
例子:position('om' in 'Thomas') = 3
函數:substring(string [from int] [for int])
說明:Extract substring 截取任意長度的子字符串
例子:substring('Thomas' from 2 for 3) = hom
函數:substring(string from pattern)
說明:Extract substring matching POSIX regular expression. See Section 9.7 for more information on pattern matching. 利用正則表達式對一字符串進行任意長度的字串的截取
例子:substring('Thomas' from '...$') = mas
函數:substring(string from pattern for escape)
說 明:Extract substring matching SQL regular expression. See Section 9.7 for more information on pattern matching. 利于正則表達式對某類字符進行刪除,以得到子字符串
例子:trim(both 'x' from 'xTomxx') = Tom
函數:trim([leading | trailing | both] [characters] from string)
說 明:Remove the longest string containing only the characters (a space by default) from the start/end/both ends of the string 去除盡可能長開始,結束或者兩邊的某類字符,默認為去除空白字符,當然可以自己指定,可同時指定多個要刪除的字符串
例子:trim(both 'x' from 'xTomxx') = Tom
函數:upper(string)
說明:Convert string to uppercase 將字符串轉換為大寫
例子:upper('tom') = TOM
函數:ascii(string)
說明:ASCII code of the first character of the argument. For UTF8 returns the Unicode code point of the character. For other multibyte encodings. the argument must be a strictly ASCII character. 得到某一個字符的Assii值
例子:ascii('x') = 120
函數:btrim(string text [, characters text])
說 明:Remove the longest string consisting only of characters in characters (a space by default) from the start and end of string 去除字符串兩邊的所有指定的字符,可同時指定多個字符
例子:btrim('xyxtrimyyx', 'xy') = trim
?
update property set memorial_no = btrim(memorial_no, ' ') where memorial_no like ' %'
或update property set memorial_no = trim(both ' '?from memorial_no) where memorial_no like ' %'
?