如何在 Redshift UDF 中 trim 变量
How to trim variable in Redshift UDF
感谢这里的建议,现在我可以通过 Redshift UDF 检查日期值了,How to check if '20210228' is a valid date? - whosebug.com。
为了排除 null 或 '',我添加了 'if x1 is None or x1 == '' : return False',它起作用了。
但我仍然需要排除 space ' ' -- 目前它 return 是真的,即使它不是正确的日期值。
如果我 trim 目标值在 UDF 之外,它 return 是错误的,正如预期的那样。似乎我不能在 UDF 中使用 trim,例如 'if trim(x1) is None or trim(x1) == '' : return False'。或者不能使用像 'len(x1) > 0'.
这样的长度函数
如果您给我进一步的建议以改进以下 UDF,我将不胜感激。提前谢谢你。
--example
select f_isdate('2021-03-01'); --> returns true, since it's correct date string
select f_isdate(''); --> returns false, as expected
select f_isdate('0'); --> returns false, as expected
select f_isdate(' '); --> returns true, as NOT expected
select f_isdate(trim(' ')); --> returns false, if the target value is trimmed
-- revised UDF
CREATE OR REPLACE FUNCTION f_isdate (x1 varchar)
returns bool
IMMUTABLE
as $$
if x1 is None or x1 == '' : return False
from dateutil.parser import parse;
try:
parse(x1,ignoretz=True);
except:
return 1==2;
else:
return 1==1;
$$ language plpythonu;
我已经测试了所有案例并且它有效:
CREATE OR REPLACE FUNCTION f_isdate (x1 varchar)
returns bool
IMMUTABLE
as $$
if x1 is None or x1.strip() == "":
return False
from dateutil.parser import parse
try:
parse(x1.strip(), ignoretz=True)
return True
except:
return False
$$ language plpythonu;
感谢这里的建议,现在我可以通过 Redshift UDF 检查日期值了,How to check if '20210228' is a valid date? - whosebug.com。
为了排除 null 或 '',我添加了 'if x1 is None or x1 == '' : return False',它起作用了。 但我仍然需要排除 space ' ' -- 目前它 return 是真的,即使它不是正确的日期值。
如果我 trim 目标值在 UDF 之外,它 return 是错误的,正如预期的那样。似乎我不能在 UDF 中使用 trim,例如 'if trim(x1) is None or trim(x1) == '' : return False'。或者不能使用像 'len(x1) > 0'.
这样的长度函数如果您给我进一步的建议以改进以下 UDF,我将不胜感激。提前谢谢你。
--example
select f_isdate('2021-03-01'); --> returns true, since it's correct date string
select f_isdate(''); --> returns false, as expected
select f_isdate('0'); --> returns false, as expected
select f_isdate(' '); --> returns true, as NOT expected
select f_isdate(trim(' ')); --> returns false, if the target value is trimmed
-- revised UDF
CREATE OR REPLACE FUNCTION f_isdate (x1 varchar)
returns bool
IMMUTABLE
as $$
if x1 is None or x1 == '' : return False
from dateutil.parser import parse;
try:
parse(x1,ignoretz=True);
except:
return 1==2;
else:
return 1==1;
$$ language plpythonu;
我已经测试了所有案例并且它有效:
CREATE OR REPLACE FUNCTION f_isdate (x1 varchar)
returns bool
IMMUTABLE
as $$
if x1 is None or x1.strip() == "":
return False
from dateutil.parser import parse
try:
parse(x1.strip(), ignoretz=True)
return True
except:
return False
$$ language plpythonu;