我有表数据:甲骨文,REGEXP_LIKE
43 SQL Developer 2016-04-25/14:15:18
43 SQL Developer 2016-04-25/14:11:41
43 SQL Developer 2016-04-26/11:11:11
,我想只显示行,其中日期是25.04。我是新的正则表达式,并且这个字符串像[]] [] /。总是让我烦恼。
我有表数据:甲骨文,REGEXP_LIKE
43 SQL Developer 2016-04-25/14:15:18
43 SQL Developer 2016-04-25/14:11:41
43 SQL Developer 2016-04-26/11:11:11
,我想只显示行,其中日期是25.04。我是新的正则表达式,并且这个字符串像[]] [] /。总是让我烦恼。
我的第一个倾向是做日期的操作,但由于这个问题是问REGEXP_LIKE方面我假设OP想要使用的字符串操作:
转换列3到一个日期,然后提取其中一个月= 4,天= 25:
with tbl(col1, col2, col3) as (
select 43, 'SQL Developer', to_date('2016-04-25/14:15:18', 'YYYY-MM-DD/HH24:MI:SS') from dual union
select 43, 'SQL Developer', to_date('2016-04-25/14:11:41', 'YYYY-MM-DD/HH24:MI:SS') from dual union
select 43, 'SQL Developer', to_date('2016-04-26/11:11:11', 'YYYY-MM-DD/HH24:MI:SS') from dual
)
select col1,
col2,
col3
from tbl
where EXTRACT(month FROM col3) = 4
and EXTRACT(day FROM col3) = 25;
使用REGEXP_LIKE:
with tbl(col1, col2, col3) as (
select 43, 'SQL Developer', '2016-04-25/14:15:18' from dual union
select 43, 'SQL Developer', '2016-04-25/14:11:41' from dual union
select 43, 'SQL Developer', '2016-04-26/11:11:11' from dual
)
select col1,
col2,
col3
from tbl
where regexp_like(col3, '04-25\/');
这是假定了很多有关的日期/时间列是店d在varchar2中(可以说是一个坏主意)。它始终是这种格式,它不是NULL,分隔符总是一个斜线,如果输入来自一个屏幕形式的验证和清理,以确保它匹配这种格式,等等。你可能想要搜索的日期/时间列意想不到的格式,以确保你真的知道你在处理什么。由于它是一个varchar2,你真的不能确定(存储在该数据类型中的日期问题之一)。
我强烈建议您将此日期/时间存储在适当的日期列中,并且如果您拥有该权限,则可以节省一些麻烦。
编辑:你可以拧紧它通过使用此REGEXP_SUBSTR比较。正则表达式使它匹配整条线,特别将所捕获的每月/每天的组与您想要的匹配。如果未找到模式,则返回NULL,这样处理是通过用NVL周围是reurns“VALUE NOT FOUND”或什么是合适的,也许:
where regexp_substr(col3, '^\d{4}-(\d{2}-\d{2})\/\d{2}:\d{2}:\d{2}$', 1,1,null,1) = '04-25';
SYSDATE支持这种格式(2016-04-25/14:15:18)? Mayby SYSTIMESTAMP? –
如果您想与日期(真正的日期时间格式的值)进行比较,无论它是来自数据库中表的值,运行时传入的绑定变量还是其他任何类型的真正“日期时间” TIPE,你可以比较像这样:
... where to_date(substr(your_col, 1, instr(your_col, '/')-1), 'yyyy-mm-dd') = date_param
这里your_col是你在你的问题中所示的列名(持有这些字符串‘看起来像’日期/时间),并DATE_PARAM是你约会想要比较。
注意 - 如果date_param可能有TIME组件(非00:00:00),则需要在右侧有trunc(date_param)。在左边,你不需要trunc(),因为to_date使用的方式已经给你一个“截断”的数据(默认时间设置为00:00:00)。
祝你好运!
什么标准'like'条款:'这里your_column如'%04-25%'?否则,请参阅http://stackoverflow.com/a/22944075/1225328快速介绍正则表达式。 – sp00m
日期列是真的'varchar'还是'date'就像你给出的一样显示。 – Utsav
以这种格式... 25/14 ...它必须是varchar –