我在数据库中有一个类型为varchar的列,并将datetime值存储在:
下15-05-2017 16:36:49
14-05-2017 19:27:41
等等
格式为dd-mm-yyyy hh:mm:ss
。
从MSSQL查询中,我想从此列中获取所有唯一日期。我已尝试按照stackoverflow本身的一个artiles上的建议使用DATE_FORMAT,但它没有用。
bs.com.CommandText = "SELECT DISTINCT(DATE_FORMAT(dat, '%d-%m-%Y') AS dat) FROM table";
我希望输出是从上面提到的列中获取的唯一日期列表(没有时间)。
我正在使用:MSSQL 2008 Express Edition和Visual Studio 2010 Express Edition。
请注意我使用的是内联查询,而不是存储过程。
答案 0 :(得分:2)
只需转发date
:
SELECT DISTINCT CAST(date as DATE)
FROM table;
强制转换会在计数之前删除时间组件。无需将值转换为字符串。
编辑:
不要将日期/时间值存储为字符串!使用正确的数据类型。但是,因为你是,你可以这样做:
SELECT DISTINCT LEFT(date, 10)
FROM table;
答案 1 :(得分:0)
;With cte([Datetime])
As
(
SELECT '15-05-2017 16:36:49'Union all --Sample date
SELECT '14-05-2017 19:27:41'Union all
SELECT '15-05-2017 16:36:49'Union all
SELECT '12-05-2017 19:27:41'Union all
SELECT '15-05-2017 16:36:49'Union all
SELECT '16-05-2017 19:27:41'Union all
SELECT '15-05-2017 16:36:49'Union all
SELECT '19-05-2017 19:27:41'Union all
SELECT '15-05-2017 16:36:49'Union all
SELECT '14-05-2017 19:27:41'
)
Select ROW_NUMBER()Over(Order by (Select 1)) As Seq, [Datetime] From
(
select [Datetime],ROW_NUMBER()Over(Partition by [Datetime] order by [Datetime]) seq from cte
)dt
where dt.seq=1
Output of Distinct datecolumn
Seq Datetime
-----------------------
1 12-05-2017 19:27:41
2 14-05-2017 19:27:41
3 15-05-2017 16:36:49
4 16-05-2017 19:27:41
5 19-05-2017 19:27:41
答案 2 :(得分:0)
我的解决方案与Gordon相同,但我添加了dateformat,以防您的服务器具有不同的dateformat样式。
Declare @a table (date1 varchar(100))
Insert @a
select '15-04-2017 16:36:49'
union
select '14-04-2017 19:27:41'
union
select '15-05-2017 19:20:41'
set dateformat dmy;
select distinct convert(date,date1,105) from @a