按日期过滤

时间:2012-02-02 10:20:00

标签: sql sql-server oracle

我有一个日期类型列,其中包含此格式的值

1.1.2012 10:10:11

我需要创建一个过滤器,按天,月和年过滤这些值。

我试过

where like '% 1.1.2012 %'

但这似乎不起作用。

3 个答案:

答案 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的