如何用SELECT DISTINCT提取SQL中带时间戳的唯一日期?
提取唯一日期部分的SQL解决方案
核心思路是将带时间的日期值转换为纯日期类型,或截取字符串中的日期片段,再通过SELECT DISTINCT获取唯一结果。以下是不同数据库的具体实现:
Oracle
针对DATE/TIMESTAMP类型列
使用TRUNC()函数截断时间部分,保留纯日期:
SELECT DISTINCT TRUNC(your_datetime_column) AS unique_date FROM your_table;
针对字符串类型列(如VARCHAR2)
直接截取前9位字符获取日期部分:
SELECT DISTINCT SUBSTR(your_string_column, 1, 9) AS unique_date FROM your_table;
MySQL
针对DATETIME/TIMESTAMP类型列
用DATE()函数提取日期:
SELECT DISTINCT DATE(your_datetime_column) AS unique_date FROM your_table;
针对字符串类型列
两种方式可选:
- 直接截取字符串:
SELECT DISTINCT SUBSTRING(your_string_column, 1, 9) AS unique_date FROM your_table;
- 先转为日期类型再提取(更适配格式不一致的场景):
SELECT DISTINCT DATE(STR_TO_DATE(your_string_column, '%d-%b-%y %H.%i.%s.%f')) AS unique_date FROM your_table;
SQL Server
针对DATETIME/DATETIME2类型列
通过CAST或CONVERT转换为DATE类型:
-- 使用CAST SELECT DISTINCT CAST(your_datetime_column AS DATE) AS unique_date FROM your_table; -- 使用CONVERT SELECT DISTINCT CONVERT(DATE, your_datetime_column) AS unique_date FROM your_table;
针对字符串类型列
用LEFT()函数截取前9位:
SELECT DISTINCT LEFT(your_string_column, 9) AS unique_date FROM your_table;
如果之前尝试DATE函数未成功,大概率是因为目标列是字符串类型而非日期类型,此时优先选择字符串截取或先转换为日期类型再处理更可靠。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

