sql - 在 Redshift 中创建 SQL UDF
问题描述
我想在 redshift 中创建一个 UDF 来替换下面的 case 语句
SELECT CASE
WHEN column1= 'value' then coalesce(replace(column2,',', '')::decimal, 0) /52
WHEN column1= 'value2' then coalesce(replace(column2,',', '')::decimal, 0) /76.0
WHEN column1= 'value3' then coalesce(replace(column2,',', '')::decimal, 0) * 89.3
WHEN column1= 'value4' then coalesce(replace(column2,',', '')::decimal, 0) * 17.85
WHEN column1= 'value5' then coalesce(replace(column2,',', '')::decimal, 0)
ELSE NULL END
解决方案
CREATE OR REPLACE FUNCTION f_convert_string_to_decimal(VARCHAR, VARCHAR)
RETURNS DECIMAL
STABLE AS $$
-- Input: 'value2', '999,999,999'
-- Output: 13157894.723684210526
SELECT CASE
WHEN $1 = 'value' THEN COALESCE(REPLACE( $2, ',', '')::DECIMAL, 0) /52
WHEN $1 = 'value2' THEN COALESCE(REPLACE( $2, ',', '')::DECIMAL, 0) /76.0
WHEN $1 = 'value3' THEN COALESCE(REPLACE( $2, ',', '')::DECIMAL, 0) * 89.3
WHEN $1 = 'value4' THEN COALESCE(REPLACE( $2, ',', '')::DECIMAL, 0) * 17.85
WHEN $1 = 'value5' THEN COALESCE(REPLACE( $2, ',', '')::DECIMAL, 0)
ELSE NULL END
$$ LANGUAGE SQL
;
推荐阅读
- c - 在 R 包 MASS 中找不到 vmmin() 的定义
- mongodb - 获取用户名作为聚合变量
- c# - 使用我的 Firebase URL 获取 400(错误请求)
- node.js - 修复全局节点安装
- javascript - React+Next.js+Firebase:auth URL在signInWithEmailAndPassword后更改为用户名和密码
- html - SnipCart 2x 如何在取货时自动将库存数量添加到产品中?
- mysql - 根据具有多条记录的表中另一列的不同值添加值
- arrays - ArrayFormula 与多列的总和和乘法
- c - 我只想显示一个 printf 5 秒
- angular - 仅当填写了任何其他表单域时才需要表单域