sql - HANA SQL IsDate() 等效或采用无效数据的 to_date 函数?
问题描述
select ISDATE('20170213') from dummy;
select ISDATE('JUNK') from dummy;
如何做到这一点HANA SQL
。
解决方案
好的,这似乎有效。
select DATS_IS_VALID('20170213') from dummy; -- 1 -- expects YYYYMMDD only
select DATS_IS_VALID('2017-0213') from dummy; -- 0
select DATS_IS_VALID('2017-02-13') from dummy; -- 0
select DATS_IS_VALID('20170233') from dummy; -- 0
select DATS_IS_VALID('21-02-2017') from dummy; -- 0
select DATS_IS_VALID('02212017') from dummy; -- 0
另请参阅 tstmp_is_valid() 了解时间戳。也见这里
或者 - 使用 UDF - 只需要 YYYYMMDD 和 YYYY-MM-DD
--DROP FUNCTION ISDATE;
CREATE FUNCTION ISDATE (inputval NVARCHAR(100))
-- expects format YYYYMMDD
RETURNS RETURNVAL BOOLEAN
LANGUAGE SQLSCRIPT
AS
BEGIN
DECLARE DT date;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
RETURNVAL := false;
END;
select CAST(:inputval AS DATE) into DT from dummy;
RETURNVAL := true;
END;
select ISDATE('20170213') from dummy; --true
select ISDATE('2017-02-13') from dummy; --true
select ISDATE('2017-FEB-13') from dummy; --false
select ISDATE('13-12-2017') from dummy; --false
select ISDATE('abc') from dummy; --false
select ISDATE('13-Dec-2017') from dummy; --false
select ISDATE('20170232') from dummy; --false
这是处理不良数据的“单次”“迄今为止”——如果无效则返回 NULL,请确保所有日期都与格式字符串匹配,否则它将转换为 null。
CREATE FUNCTION TO_DATE_V2 (inputval NVARCHAR(100), format_str NVARCHAR(20))
RETURNS RETURNVAL DATE
LANGUAGE SQLSCRIPT
AS
BEGIN
DECLARE DT date;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
RETURNVAL := NULL;
END;
select TO_DATE(:inputval, :format_str) into DT from dummy;
RETURNVAL := :DT;
END;
select TO_DATE_V2('20-04/2017', 'DD/MM/YYYY') from dummy; -- null
select TO_DATE_V2('20/04/2017', 'DD/MM/YYYY') from dummy; -- 2017-04-20
select TO_DATE_V2('JUNK', 'DD/MM/YYYY') from dummy; -- null
推荐阅读
- android - 如何在 Android Studio 中创建带有图像视图和 25 个文本视图的布局?
- javascript - JavaScript:在没有服务器的情况下将 HTML 表单和复选框数据保存到 .txt 文件?
- corda - Corda 节点可以从网络地图中过期吗?
- c++ - 计算一次占用的最大房间数
- c# - Xml Deserialize 适用于 .Net 4.5.2,与 4.6 中断:xmlns 不是预期的
- java - 在测试容器上使用 docker-compose.yml 时如何解决安装问题
- c++ - 如何从 Qt Test 单元测试类访问和测试 Qt 窗口的私有小部件?
- arduino - 如何在 Arduino 程序中包含代码片段(不是对象)?
- c# - 从泛型类调用委托方法
- python - 使用子进程在管道输出上调用 sed 的结果不一致