2012-02-02 160 views
0

我有一个日期类型的列,其中以这种格式过滤按日期

1.1.2012 10:10:11 

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

我已经试过

where like '% 1.1.2012 %' 

但这似乎不工作。

+3

你已经列出了sql server和oracle你正在使用哪一个? – Taryn 2012-02-02 10:27:04

+1

日期不是varchars(如果您愿意,也可以是字符串)。您可以更改用于显示日期而不更改其值的格式。此外,您正在使用哪种数据库?答案取决于这个信息。 – 2012-02-02 10:29:20

+0

我对这两种解决方案都感兴趣。 – user49126 2012-02-02 10:31:55

回答

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

+0

如何进一步简化? – Ben 2012-02-02 11:22:03

+0

@你说得对。我不知何故完全忘记了这一点。它会在to_date('01 .01.2012','dd.mm.yyyy')和to_date('01 .01.2012','dd.mm.yyyy')之间的WHERE date_and_time;' – 2012-02-02 11:30:14

2

甲骨文不会存储您的日期字段的格式,但你可以to_char功能格式化输出。例如:

select to_char(date_field,'dd/mm/yyyy hh24:mi:ss') 

如果查询没有格式的日期,输出格式将取决于您所使用的工具与您的NLS_DATE参数了。

要在Oracle中过滤日期,您可以使用to_date函数,该函数接收字符串并以某种特定格式解析日期。你可以看到to_datehere

选项的所有选项来过滤日期字段:

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') 
2

在MSSQL中,你可以使用最新的功能,这都好办。一种方式是这样的:

where Year (date) = 2012 
and Month(date) = 1 
and Day (date) = 1 

但还有其他解决方案。看看下面的页面的信息: http://msdn.microsoft.com/en-us/library/ms186724.aspx

我最近工作与日期时间值的字符串表示。我建议不要这样做,并且始终与日期一起工作,因为MSSQL-Server的兼容性。

如果使用日期时间值的字符串表示形式,则需要非常小心不同语言设置的格式,而不是使用自己的服务器上的格式。 字符串在其他服务器上可以解释为不同(ISO格式与us格式)。