【問題描述】
在彙集查詢時,可否將字符類型字段按照實際內容進行分組去重呢?
示例:mysql
- 插入數據包含字符串
db.cs.cl.insert( { a : {「20190101000000」 }} )
db.cs.cl.insert( { a : {「20190101111111」 }} )
db.cs.cl.insert( { a : {「20190103000000」 }} )sql
- 執行 aggregate 查詢,可否實現將字符串格式按照 20190301 這一段內容 進行分組去重?
【解決辦法】函數
- SequoiaDB aggregate 函數目前不支持將字符串的某段內容進行分組,只支持對整個字符串進行分組去重
- 從客戶的問題來看,客戶是想將字符串格式的時間戳轉成時間內容來進行分組,最便捷的方法是經過 SQL 語法去實現
- 針對客戶的問題,能夠利用 SequoiaSQL-MySQL/SequoiaSQL-PostgreSQL + SequoiaDB 工具,使用標準 SQL 語句實現將字符串格式的時間戳轉成日期內容進行分組去重,示例以下:
1) 使用 SQL 語句建表:
mysql> create table t1 ( a char(16) ) ;
2) 插入數據
mysql> insert into t1 values ( "20190101000000" );
mysql> insert into t1 values ( "20190101111111" );
mysql> insert into t1 values ( "20190103000000" );
3) 使用 SQL 語句將字符串格式轉成日期內容進行分組去重
mysql> select count( a), date_format( a. '%Y-%m-%d' ) a from t1 group by date_format( a, '%Y-%m-%d' );
4) 步驟3查詢結果以下:
count ( a ) a
2 2019-01-01
1 2019-01-03
- 若是字符串內容非時間戳格式,則沒法轉成日期內容進行分組去重