我有一个日期类型列,其中包含此格式的值
1.1.2012 10:10:11
我需要创建一个过滤器,按天,月和年过滤这些值。
我试过
where like '% 1.1.2012 %'
但这似乎不起作用。
答案 0 :(得分:2)
Oracle不会存储格式化的日期字段,但您可以使用to_char
函数格式化输出。例如:
select to_char(date_field,'dd/mm/yyyy hh24:mi:ss')
如果查询没有格式化的日期,输出格式将取决于您使用的工具和NLS_DATE参数。
要在Oracle中过滤日期,您可以使用to_date
函数,该函数接收字符串并使用某种特定格式进行解析。您可以看到to_date
here
过滤日期字段的选项:
where date_field between to_date('1.1.2012 00:00','d.m.yyyy hh24:mi') and to_date('1.1.2012 23:59','d.m.yyyy hh24:mi')
-- you possibly will lost some performance with this second one
where trunc(date_field) = to_date('1.1.2012','d.m.yyyy')
答案 1 :(得分:2)
在MSSQL中,您可以使用易于处理的日期函数。一种方式是这样的:
where Year (date) = 2012
and Month(date) = 1
and Day (date) = 1
但还有其他解决方案。有关mor信息,请查看以下页面: http://msdn.microsoft.com/en-us/library/ms186724.aspx
我最近使用datetime-values的字符串表示法。我建议不要这样做,并始终使用日期,因为兼容性,说到MSSQL服务器。
如果使用datetime-values的字符串表示,则需要非常小心不同语言设置的格式,而不是自己服务器上的格式。 字符串可以在其他服务器上解释不同(ISO格式与us格式)。
答案 2 :(得分:1)
一种可能性是做这样的事情:
WHERE date_and_time >=to_date( '01.01.2012','dd.mm.yyyy') and date_and_time <= to_date('01.01.2012','dd.mm.yyyy');
date_and_time是日期列的名称。
编辑:这是针对Oracle的