You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server汇率转换函数转Snowflake(JavaScript实现求助)

将SQL Server的[dbo].[fnCurrencyExchange]转换为Snowflake UDF
  • 请提供原SQL Server环境下[dbo].[fnCurrencyExchange]的完整代码,包括参数定义、内部逻辑(比如汇率获取方式、日期处理规则、特殊场景判断等),这是精准转换的核心依据。
  • 贴出你编写的Snowflake JavaScript UDF代码,并说明具体问题:是语法报错、逻辑结果不符,还是运行时权限/资源问题?

通用转换示例参考

基于SQL语言的UDF(适合纯SQL逻辑场景)

如果原函数依赖数据库内的汇率表进行转换,以下是适配Snowflake的SQL UDF示例:

CREATE OR REPLACE FUNCTION FN_CURRENCY_EXCHANGE(
    p_source_currency VARCHAR,
    p_target_currency VARCHAR,
    p_amount NUMERIC(18,4),
    p_exchange_date DATE
)
RETURNS NUMERIC(18,4)
LANGUAGE SQL
AS $$
    SELECT 
        CASE 
            WHEN p_source_currency = p_target_currency THEN p_amount
            ELSE p_amount * exchange_rate
        END
    FROM exchange_rates
    WHERE source_currency = p_source_currency
      AND target_currency = p_target_currency
      AND effective_date <= p_exchange_date
      AND (expiration_date IS NULL OR expiration_date > p_exchange_date)
    ORDER BY effective_date DESC
    LIMIT 1;
$$;

基于JavaScript的UDF(适合复杂自定义逻辑场景)

如果原函数包含复杂分支或非SQL原生逻辑,以下是Snowflake JavaScript UDF示例:

CREATE OR REPLACE FUNCTION FN_CURRENCY_EXCHANGE_JS(
    p_source_currency VARCHAR,
    p_target_currency VARCHAR,
    p_amount FLOAT,
    p_exchange_date DATE
)
RETURNS FLOAT
LANGUAGE JAVASCRIPT
AS $$
    // 示例:内置固定汇率,实际可通过Snowflake查询获取实时/历史汇率
    const rateMap = new Map([
        ["USD-EUR", 0.92],
        ["EUR-USD", 1.09],
        ["USD-GBP", 0.79]
    ]);

    if (p_source_currency === p_target_currency) {
        return p_amount;
    }

    const rateKey = `${p_source_currency}-${p_target_currency}`;
    if (rateMap.has(rateKey)) {
        return p_amount * rateMap.get(rateKey);
    } else {
        throw new Error(`Exchange rate not found for pair: ${rateKey}`);
    }
$$;

内容的提问来源于stack exchange,提问作者SARBOJIT DAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:50:54