我试图在雪花中的UDF下编写。但是它不允许使用SQL函数,例如TO_DATE,DATE_ADD,dayofweek。任何其他想法都会有所帮助。谢谢。
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
$$```
答案 0 :(得分:2)
在JavaScript中创建日期函数相对容易。看下面的例子。
只要记住:
DATE
SQL数据类型进行输入和输出;
终止每个语句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);
new Date()
在当月的几天之外进行加减运算时会产生一些魔力。
答案 1 :(得分:0)
以标量SQL UDF形式实现您的功能可以解决这种情况。或者,您可以实现自己的JavaScript日期数学。 For example。好消息是您可以从SQL UDF调用JS UDF。
答案 2 :(得分:-1)
您可能需要尝试如下操作:
创建或替换过程dbo.usp_test()
返回VARCHAR
语言javascript
作为呼叫者执行
AS
$$
Snow.createStatement({sqlText:“ SET dt = DATEADD(MONTH,1,CURRENT_TIMESTAMP)”}).execute();
返回“成功”;
$$
;
-致电ds_work.ddd.usp_test()