2017-08-21 111 views
0

我在表sample中有以下數據。我正在使用Oracle數據庫。基於不同列值選擇行


column1  column2   column3 
A    01   2017-07-27-04.24.58.851340 
B    01   2017-07-27-06.43.19.654420 
C    01   2017-08-10-08.26.47.633480 

我需要拔出基於SUBSTR(column3, 1,10)值不同記錄的計數。

例如:

在第一行中, 的column3SUBSTR(column3, 1,10)值爲2017-07-27

在第二行, 的column3SUBSTR(column3, 1,10)值爲2017-07-27其是相同第一行

在第三行中,column3SUBSTR(column3, 1,10)值爲2017-08-10,與第一行不同兩排。

因此,根據不同的SUBSTR(column3, 1,10)值,計數應返回爲2

有人可以幫我嗎?

+0

如果'column3'有'Timestamp'的數據類型,爲什麼不'DATE'部分的'COUNT'而不是做一個'SUBSTR'。即使它是字符串,嘗試將其轉換爲'TIMESTAMP'並應用建議的選項 –

回答

3
select count(distinct SUBSTR(column3, 1,10)) 
from sample 
+0

這是一個簡單而完美的解決方案。 +1爲您的快速響應 –

2

既然你似乎是存儲時間戳值作爲字符串(你不應該這樣做,而且應該將它們存儲爲時間戳),你可以將其轉換爲一個時間戳,然後截斷時間組件的開始天:

SELECT COUNT(DISTINCT TRUNC(TO_TIMESTAMP(column3, 'YYYY-MM-DD-HH24.MI.SS.FF6'))) 
      AS num_days 
FROM  your_table 

但是,你也可以只使用字符串值:

SELECT COUNT(DISTINCT SUBSTR(column3, 1, 10)) AS num_days 
FROM  your_table 

如果您將您的表來存儲它們的時間戳,那麼你可以只使用:

SELECT COUNT(DISTINCT TRUNC(column3)) AS num_days 
FROM  your_table 
+0

是的..我們在數據庫中存儲字符串,我不應該改變設計。謝謝你的解釋。爲它+1。 –