Snowflake cloud data platform 如何在snowflake UDF中调用mysql函数
我正试图在snowflake中编写下面的UDF,但它不允许使用sql函数,如日期、日期添加、dayofweek。任何其他想法都会有帮助。谢谢Snowflake cloud data platform 如何在snowflake UDF中调用mysql函数,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正试图在snowflake中编写下面的UDF,但它不允许使用sql函数,如日期、日期添加、dayofweek。任何其他想法都会有帮助。谢谢 CREATE OR REPLACE FUNCTION getShippingDate(deliveryDate varchar,deliveryCountryCode varchar, holidayList varchar,deliveryDays varchar) RETURNS VARCHAR LANGUAGE JAVASCRIPT AS $$
CREATE OR REPLACE FUNCTION getShippingDate(deliveryDate varchar,deliveryCountryCode varchar, holidayList varchar,deliveryDays varchar)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS $$
deliveryPeriod = 0
weekDay = 0
deliveryDate= TO_DATE(deliveryDate)
if(deliveryCountryCode != 'IN') {
deliveryPeriod = 2
}
else {
deliveryPeriod = deliveryDays + 1
}
if(deliveryPeriod <= 0) {
deliveryPeriod = 1
}
/* substract delivery period from delivery date */
deliveryDate = DATEADD(Day ,-deliveryPeriod, to_date(deliveryDate))
weekDay = dayofweek(deliveryDate)
/* if shipping date falls on sunday then substract 2 days */
if (weekDay == 0) {
deliveryDate = DATEADD(Day ,-2, to_date(deliveryDate))
}
/* if shipping date falls on saturday then substract 1 days */
if(weekDay == 6){
deliveryDate = DATEADD(Day ,-1, to_date(deliveryDate))
}
/* check if shipping date falls on holiday then substract 1 */
if(charindex(deliveryDate , holidayList) > 0) {
deliveryDate = DATEADD(Day ,-1, to_date(deliveryDate))
}
return deliveryDate
$$```
您可能需要尝试以下方法: 创建或替换程序dbo.usp_test 返回VARCHAR 语言javascript 以调用方身份执行 像 $$ snowflake.createStatement{sqlText:SET dt=DATEADDMONTH,1,CURRENT_TIMESTAMP}.execute; 回归"成功",; $$ ;
-调用ds_work.ddd.usp_test将函数实现为标量SQLUDF可以解决这种情况下的问题。或者您可以实现自己的javascript日期数学。好消息是,您可以从SQL UDF调用JS UDF。用JavaScript创建日期函数相对容易。看看下面的例子。 记住: 请使用日期SQL数据类型进行输入和输出 如果要在MixedCase中引用参数,则必须引用这些参数 使用分号;终止每个语句
当您在一个月的天数之外进行加减操作时,“新日期”会发挥一些魔力。谢谢您的努力,但我希望在UDF中使用相同的日期,以便在select查询中使用相同的日期。当然,这在存储过程中是可能的。顺便说一句,SQL DATE\u FROM\u PARTS与new DATE有着相同的魔力,例如,DATE\u FROM\u PARTS ear,1,0可以为您提供前一年的除夕夜。嗨,Hans,非常感谢。我看到了,但我不能在snowflake中使用它,我在snowflake文档中没有看到这种示例。谢谢你的想法,我有一些新的东西要学。不客气,文档中的例子有些单薄。我最终尝试了所有东西的参数,这很耗时。但有时是值得的。我的例子中的DATE_FROM_PARTS也有不足之处。该函数具有与DATEADD类似的属性。月和日参数可以是任意数字。例如,在日期中,来自日期部分2019、13、32的月份和日期都会溢出,最终的结果是2020-02-01。
CREATE OR REPLACE FUNCTION getShippingDate("deliveryDate" DATE, "offset" FLOAT)
RETURNS DATE
LANGUAGE JAVASCRIPT
AS $$
function day_add(dt, days) {
return new Date(dt.getFullYear(), dt.getMonth(), dt.getDate() + offset);
}
return day_add(deliveryDate, offset);
$$;
SELECT getShippingDate(CURRENT_DATE, -2);