使用sql代码/函数将Salesforce ID从15位转换为18位

时间:2019-04-29 20:35:04

标签: sql sql-server salesforce sqlcode

我们当前正在将数据从SalesForce提取到SQL数据库表中。在为潜在顾客ID创建的不同对象上有2个自定义字段,并查找链接了事件/任务的查找(可以是客户ID,联系人ID或潜在顾客ID)。两者都提取了15位ID。

我正在尝试查找是否有任何SQL代码或SQL函数可让我将15位数字转换为18位ID。

我需要有18位ID才能加入其他对象。

感谢您的帮助。

我们已经尝试在SalesForce中使用CASESAFEID(Id)函数,但是使用已经设置的API和可见性级别,我们的特定ETL并未显示该字段。另外,我们需要聘请顾问来处理查找列。

我想获取15位数字的ID,并将其转换为18位数字的代码。如果SalesforceID为0035000002tAzbu,我如何获取转换后的18位数字值为0035000002tAzbuACC。我需要使用SQL查询或SQL函数获取最后3位数字。

2 个答案:

答案 0 :(得分:0)

可以计算该值。查看此流程图。

来源:https://stackoverflow.com/a/29299786/3135974

enter image description here

答案 1 :(得分:0)

您可以在sql数据库中编写自定义函数。

例如在雪花中,您可以创建类似这样的功能


CREATE OR REPLACE FUNCTION dw.my_schema.f_sfdc_ch15_to_ch18("txt" string)
    RETURNS string
    LANGUAGE JAVASCRIPT
    AS '
    if ( txt == undefined || txt == "" || typeof txt == "undefined" || txt == null) {
        return ;
    } else {
        var id15, id18;
        
        if (txt.length == 18) {
            return txt;
        } else if (txt.length == 15) {
            id15 = [txt.trim()];
        } else {
            return "";
        }
        for ( var x=0; x < id15.length; x++ ) {
            var s = "";
            for ( var i=0; i<3; i++) {
                var f = 0;
                for (var j=0; j<5; j++) {
                    var c = id15[x].charAt(i*5+j);
                    if (c>="A" && c<="Z") {
                        f+=1<<j;
                    }
                }
                s += "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345".charAt(f);
            }
            id18 = id15[x]+s;
        }
    }
    return id18.toString();
    ';

并像这样使用它

select dw.my_schema.f_sfdc_ch15_to_ch18(id15) from mytable;