如何查询varchar2的格式?示例是Varchar2字段,其中包含日期为mm / dd / yyyy&01:01/01/20'。我怎样才能找到一个写成yyyy / mm / dd' 2015/01/01'因为我不知道格式错误的日期所以我无法真正搜索它。我只想写public void percentageChanged(int percs)
{
Invoke(new Action(() =>
{
progressBar1.Value = percs;
}));
}
,但这显然不起作用。
答案 0 :(得分:3)
当然,如果你使用正则表达式,你想要做的是什么:
where regexp_like(field_1, '^[0-9]{4}/[0-9]{2}/[0-9]{2}$')
作为旁注:您不应该将数据库中的日期存储为字符串。你应该使用日期。
答案 1 :(得分:1)
戈登的回答可能已经足够满足您的需求了,但是他给你的正则表达式可能会匹配像9999/99/99这样不是日期的东西。
如果你真的需要匹配日期 - 如果日期是VARCHAR2的整个值而不仅仅是嵌入在其中 - 那么函数可以提供帮助。
在下面的示例中,我创建了一个名为safe_to_date
的函数,如果给定的VARCHAR2值不是指定格式的日期,则返回NULL。
CREATE OR REPLACE FUNCTION safe_to_date ( p_string VARCHAR2 ) RETURN DATE IS
BEGIN
RETURN to_date(p_string,'YYYY/MM/DD');
EXCEPTION
WHEN others THEN
RETURN NULL;
END;
with my_table AS
( SELECT '9999/99/99' /*invalid*/ my_column FROM dual UNION ALL
SELECT '2015/12/25' from dual UNION ALL
SELECT 'not a date at all' /*invalid*/ FROM dual UNION ALL
SELECT '11-NOV-1917' from dual UNION ALL
SELECT '2015*DEC*25' from dual UNION ALL
SELECT '2015/02/28' from dual UNION ALL
SELECT '2015/02/29' /*invalid*/ from dual)
SELECT *
FROM my_table
WHERE safe_to_date(my_column) IS NOT NULL;
预期结果:
25-DEC-2015
11-NOV-1917
25-DEC-2015
28-FEB-2015