2012-02-02 155 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格式)。