错误:XX000:ValueError:应为datetime对象。有关详细信息,请查看svl\U udf\U日志

2024-09-30 05:33:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在redshift中创建了python UDF,用于检查我的数据是否有有效的日期条目(如果没有,则返回NULL)

UDF创建成功,但当我将值传递给函数时,它的抛出错误

Python代码在googlecolab中运行良好。但不是红移

CREATE OR REPLACE FUNCTION public.fn_isdate(date_text character varying)
  RETURNS timestamp  without time zone
stable
as $$
import datetime
def validate(dt):
    try:
        ti = datetime.datetime.strptime(dt,'%m/%d/%Y')
        return ti.strftime('%m/%d/%Y')
    except TypeError:
        return None
    except ValueError:
        try:
            ti = datetime.datetime.strptime(dt, '%Y-%m-%d')
            return ti.strftime('%m/%d/%Y')
        except ValueError:
            return None   
return validate(date_text)
$$ language plpythonu;

我期望12/22/2003这个-SELECT public.fn_isdate('2003-12-22');NULL对于这个-SELECT public.fn_isdate('03-12-22');


Tags: textdatetimedatereturndttipublicvalidate
1条回答
网友
1楼 · 发布于 2024-09-30 05:33:35

将函数声明为返回timestamp without time zone,然后返回python string。 不将日期转换为字符串会产生以下效果:

CREATE OR REPLACE FUNCTION sbochniak.fn_isdate(date_text character varying)
  RETURNS timestamp  without time zone
  stable
as $$
import datetime
def validate(dt):
    try:
        ti = datetime.datetime.strptime(dt,'%m/%d/%Y')
        return ti
    except TypeError:
        return None
    except ValueError:
        try:
            ti = datetime.datetime.strptime(dt, '%Y-%m-%d')
            return ti
        except ValueError:
            return None
return validate(date_text)
$$ language plpythonu;

然后:

SELECT
   sbochniak.fn_isdate('2003-12-22') as a,
   sbochniak.fn_isdate('03-12-22') as b;

退货:

a                           b
2003-12-22 00:00:00.000000  <NULL>

相关问题 更多 >

    热门问题