1. 程式人生 > >支付寶賬戶等顯示*的實現級聯學習TRANSLATE、RPAD/LPAD函式用法

支付寶賬戶等顯示*的實現級聯學習TRANSLATE、RPAD/LPAD函式用法

平常在支付寶或者銀行賬戶等轉賬的時候系統為了保護隱私,一般將客戶的姓打成 * 號,直接看例子

SQL> --示例版,無法解決 倆字名字 如:肖真 或者帶有重複名字如:肖真真
SQL> SELECT TRANSLATE('王海波',SUBSTR('王海波', 1, LENGTH('王海波') - 2),RPAD('*', LENGTH('王海波'), '*')) FNAME FROM DUAL;

FNAME
-----
*海波

SQL> --隨機取數解決不了名字重複的問題,如:肖真真
WITH X AS
 (SELECT '王海波' NAME
    FROM DUAL
  UNION ALL
  SELECT '肖真' NAME
    FROM DUAL
  UNION ALL
  SELECT '肖真真' NAME
    FROM DUAL)
SELECT NAME,
       TRANSLATE(NAME,
                 SUBSTR(NAME,
                        1,
                        ROUND(DBMS_RANDOM.VALUE(1, LENGTH(NAME) - 1))),
                 RPAD('*', LENGTH(NAME), '*')) FNAME
  FROM X

 NAME   FNAME
------ ------------
王海波 *海波
肖真   *真
肖真真 *真真
 WITH X AS (
    SELECT '王海波' NAME FROM DUAL UNION ALL
    SELECT '肖真' NAME FROM DUAL UNION ALL
    SELECT '肖真真' NAME FROM DUAL UNION ALL
    SELECT '阿諾斯瓦辛格' NAME FROM DUAL UNION ALL
    SELECT '成吉思汗' NAME FROM DUAL
    )
    SELECT NAME,
           TRANSLATE(NAME,
                    SUBSTR(NAME,
                           1,
                           CASE
                             WHEN LENGTH(NAME) <= 2 THEN
                              LENGTH(NAME) - 1
                             ELSE
                              LENGTH(NAME) - 2
                           END),
                    RPAD('*', LENGTH(NAME), '*')) AS FNAME
     FROM X;

NAME         FNAME
------------ ------------------------
王海波       *海波
肖真         *真
肖真真       *真真
阿諾斯瓦辛格 ****辛格
成吉思汗     **思汗

這裡級聯學習一下幾個函式:

1.TRANSLATE(EXPR,FROM,TO)
當 FROM = TO  一對一個換
當 FROM < TO  一對一個換
當 FROM > TO  一對一個換,多餘補成空
漢字/字元/數字/符號標點等都佔一個位置(記憶的話只需要記住FROM > TO這種特殊情況補成空就行) 

官方文件:

The following statement translates a license number. All letters 'ABC...Z' are translated to 'X' and all digits '012 . . . 9' are translated to '9':

SELECT TRANSLATE('2KRW229',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License"
FROM DUAL;
License
--------
9XXX999

The following statement returns a license number with the characters removed and the digits remaining:

SELECT TRANSLATE('2KRW229',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789')
"Translate example"
FROM DUAL;
Translate example
-----------------
2229

如下例子方便理解:

SQL> SELECT TRANSLATE('ABCDEFGHIJ','ABCDEF','123456') FROM DUAL;

TRANSLATE(
----------
123456GHIJ

SQL> SELECT TRANSLATE('ABCDEFGHIJ','ABC','123456') FROM DUAL;

TRANSLATE(
----------
123DEFGHIJ

SQL> SELECT TRANSLATE('ABCDEGHIJ+ABCDEFGHIJ','ABCDEFGHIJ','123456') FROM DUAL;

TRANSLATE('A
------------
12345+123456

SQL> SELECT TRANSLATE('ABCDEGHIJ+ABCDEFGHIJ','ABcdEFGHIJ','123456') FROM DUAL;

TRANSLATE('A
------------
12CD5+12CD56

SQL> SELECT TRANSLATE('我在北京', '北京', 'BeiJing') FROM DUAL;

TRANSL
------
我在Be

SQL> SELECT TRANSLATE('我是小八', '小八', '⑧') FROM DUAL;

TRANS
-----
我是⑧

當然大神們【敬禮】開發出了TRANSLATE函式的幾個妙用:

SQL> --取出字串裡的數字:
SQL> SELECT TRANSLATE('23456中國3-00=.,45','0123456789'||'23456中國3-00=.,45','0123456789') FROM DUAL;

TRANSLATE(
----------
2345630045

SQL> --取出字串裡某個符號
SQL> SELECT TRANSLATE('23456中國3-00=.,45','.'||'23456中國3-00=.,45','.') FROM DUAL;

T
-
.

SQL> --取出漢字
SQL> SELECT TRANSLATE('23456中國3-00=.,45','中國'||'23456中國3-00=.,45','中國') FROM DUAL;

TRAN
----
中國

SQL> --當然用這個取出漢字就很牽強,一般就不考慮這個函數了,可以用正則
SQL> SELECT REGEXP_REPLACE('23456中國3-00=.,45','[' || CHR(1) || '-' || CHR(127) || ']') FROM DUAL;

REGE
----
中國

SQL> --字元程式碼相關的字元對應關係如下
SQL> WITH X AS (SELECT LEVEL AS SEQ FROM DUAL CONNECT BY LEVEL<=132) SELECT SEQ,CHR(SEQ) FROM X;

這個例子裡面牽扯到另外一個函式:RPAD(LPAD) 當然這個函式就相對簡單:

RPAD/LPAD 函式從右邊/左邊對字串使用指定的字元進行填充   
RPAD/LPAD(STRING,PADDED_LENGTH,[PAD_STRING])   
STRING 表示:被填充的字串   
PADDED_LENGTH 表示:字元的長度,是返回的字串的數量,如果這個數量比原字串的長度要短,RPAD/LPAD 函式將會把字串擷取成從左到右的N個字元;   
PAD_STRING 是個可選引數,這個字串是要貼上到STRING的右邊/左邊,如果這個引數未寫,RPAD函式將會在STRING的右邊/左邊貼上【空格】。 

SQL> SELECT RPAD('ABCD',1) AS RESULT FROM DUAL;

R
-
A

SQL> SELECT RPAD('ABCD',6) AS RESULT FROM DUAL;

RESULT
------
ABCD

SQL> SELECT RPAD('ABCD',6,'+') AS RESULT FROM DUAL;

RESULT
------
ABCD++

SQL> SELECT LPAD('ABCD',1) AS RESULT FROM DUAL;

R
-
A

SQL> SELECT LPAD('ABCD',6) AS RESULT FROM DUAL;

RESULT
------
  ABCD

SQL> SELECT LPAD('ABCD',6,'+') AS RESULT FROM DUAL;

RESULT
------
++ABCD

------------------------------------------To Be Continued----------------------------------------------

相關推薦

支付賬戶顯示*的實現學習TRANSLATERPAD/LPAD函式用法

平常在支付寶或者銀行賬戶等轉賬的時候系統為了保護隱私,一般將客戶的姓打成 * 號,直接看例子 SQL> --示例版,無法解決 倆字名字 如:肖真 或者帶有重複名字如:肖真真 SQL> SELECT TRANSLATE('王海波',SUBSTR('王海波',

Mysql實現操作(更新刪除)

刪除表 null weight .cn eat 失敗 bsp src 成績 一、首先創建兩張表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name varchar(20) no

spring_boot_pay支付,微信,銀支付詳細代碼案例

fan target 簽名加密 china 整合 提示 業務 rom sig spring-boot-pay 支付服務:支付寶,微信,銀聯詳細代碼案例(除銀聯支付可以測試以外,支付寶和微信支付測試均需要企業認證,個人無法完成測試),項目啟動前請仔細閱讀 註意事項 。 友情

Android Studio 第七十九期 - Android 支付數字遞增顯示

src ati com change tree 遞增 studio bsp nbsp 代碼已經整理好,效果如下圖: 地址:https://github.com/geeklx/myapplication2018/tree/master/p023_zhif

MVC4中使用Html.DropDownList實現

準備工作 首先準備一下要級聯的資料,新建兩個類:Province和City public class Province { public string Id { get; set; } public string Name { get; set; }

Java 支付支付,退款,單筆轉賬到支付賬戶(支付支付)

  最近一直在接觸第三方,剛接入完支付寶的API做一下總結,個人能力薄弱有不對的地方望指教.  做的是一個小型電商專案,所以會接入第三方的支付和登入功能, 第一次接入第三方擼了很多官方文件.   進入主題, 支付寶支付先要去 螞蟻金服開放平臺註冊賬號:https://open.alipay.co

AngularJs實現

//讀取模板id $scope.$watch('entity.goods.category3Id',function(newValue,oldValue){ itemCatService.findOne(newValue).success(function(response){ $sco

oracle 觸發器實現更新

create or replace TRIGGER 觸發器名字 AFTER UPDATE OF 更新表的更新列列名a1 ON 更新表表名a FOR EACH ROW BEGIN IF :OLD.更新表的更新列列名a1<>:NEW.更新表的更新列列名a1 THE

網站支付登入授權具體實現

具體請參考官方文件:https://docs.open.alipay.com/263/105809/ 本文由於支付寶官方並沒有提供網站第三方登入的demo,因此筆者結合自己的實踐經驗做如下總結。 具體步驟: Step One:建立應用 訪問https://open.alipay.co

支付 單筆轉賬到支付賬戶介面

實現使用者提現 資金自動到賬 前期的支付寶配置 可以參考文章 支付寶配置 (新版) 當前開發環境: Windows phpstudy ThinkPHP5 支付寶介面新版 1.0  實現提現的步驟  1 開發者平臺進行簽約  2 找到開發文件 3 實

Ajax 實現下拉框

級聯下拉框隨處可見,最常見的就是省市的級聯,在選擇省份後,對應的區縣的下拉選擇列表的下拉選擇內容也會發生相應改變,即所謂的級聯下拉框。這種頁面非同步重新整理,無可厚非,AJax是首選。 在做一個管理系統時,有這樣一個需求,在選擇了倉庫後,對應的倉位下拉選擇框的內容也需要改變

單筆轉賬到支付賬戶介面

需求,轉賬到指定支付寶賬號功能 文件地址:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer 除錯過程中,轉賬能夠成功,但是依舊報錯 sign check fail: ch

Extjs下combox 實現

//**測試下拉框級聯** var storedm = new Ext.data.Store({ //隊名稱下拉框 proxy: new Ext.data.HttpProxy({ ur

bootstrap-Treeview實現勾選

var nodeCheckedSilent = false; function nodeChecked (event, node){ if(nodeCheckedSilent){ return; } nodeCheckedSilent = true; check

支付,微信,銀支付詳細程式碼案例

除銀聯支付可以測試以外,支付寶和微信支付測試均需要企業認證,個人無法完成測試微信退款證書,微信商戶平臺(pay.weixin.qq.com)-->賬戶中心-->賬戶設定-->API安全-->證書下載,使用apiclient_cert.p12即可支付寶支付相關引數zfbinfo.prop

Access 如何實現刪除?

    資料庫中有兩個消費相關表,xfjl(主消費記錄)和xfxxjl(消費詳細記錄),兩個表是主從關係,但我在資料庫中沒有建立表與表之間的關係,一般都是在程式碼中直接寫SQL語句,如:delete from xfjl where 條件 這樣。原來做的清除資料沒有條件限制,直

hibernate註解實現新增

摘要:如題,簡單記一下,ssh框架中,使用註解形式,怎麼級聯新增主外來鍵關聯表資料一、前期準備:1.建立工程,匯入ssh框架及資料來源的相關jar包;2.建立和資料庫有關的properties檔案,該檔

新版支付手機網站支付支付pc支付支付無密退款實現

前面我記錄過老版本的支付以及退款,這次寫的是新版本的支付和退款 和微信支付一樣,用的是IJPay這個封裝的jar,必須給大神點個贊,集成了微信支付寶支付,用的也是RSA2官方推薦的方式,給出介面呼叫即可 首先拿到支付寶相關資訊, appId,privateKey

jquery實現遇到的ajax同步請求動態DOM元素監聽事件

記錄一次實現級聯選單選項遇到的一系列問題 實現動態生成select下拉選項 json資料格式example: [ { "eventTyp

註解方式實現

級聯 級聯分為一對多,多對一單向,多對多雙向關聯。一般情況下,我們只會用到前兩種情況,多對多用的較少。我這裡使用省市區三級聯查來實現級聯的操作。簡單來說,一對多就是一個省下面有多個市,一個市下面有多個縣。多對一是剛好反過來的。 首先是使用配置檔案的情況下,關聯類,生成的h