如何筛选DateTime列的时间部分

时间:2015-08-18 07:37:17

标签: sql sql-server sql-server-2008-r2

我想根据特定时间从表中检索数据,因此我在下面使用此查询。

    select * from a
    where convert(smalldatetime,date,datepart(hh,date)) ='09:12:00'

但结果没有排。那么我应该如何处理我的预期结果?

4 个答案:

答案 0 :(得分:1)

您可以直接转换为varchar,如下所示

SELECT * FROM a
WHERE CONVERT(VARCHAR(8), [date], 108) = '09:12:00'

答案 1 :(得分:0)

试试这个:

SELECT *
FROM a
WHERE CONVERT(VARCHAR(8), [DATE],108) = '09:12:00'

您的数据类型已为smalldatetime,因此您必须转换为varchar并与字符串进行比较。

修改

答案解释:

您在[DATE]列中有smalldatetime。例如2015-10-01 09:12:00。仅比较您需要转换为仅包含时间的字符串的时间。因此,您将使用TSQL中的命令CONVERT

它会将smalldatetime转换为8个字符的字符串。因此,您将拥有09:12:00,然后将其与字符串进行比较。

答案 2 :(得分:0)

// CONVERT(DATA_TYPE(长度),表达,风格)

SELECT a.`mid`, a.cnt AS countmid, b.s AS totalnwgh
FROM
    (SELECT `mid`, COUNT(DISTINCT pid) AS cnt FROM test GROUP BY 1) AS a INNER JOIN
    (SELECT `mid`, SUM(nwgh) AS s FROM test GROUP BY 1) b ON a.mid=b.mid

答案 3 :(得分:0)

在Sql server 2008中,您可以转换为TIME。通过指定TIME(0),您可以获得所需的格式:

SELECT * 
FROM a
WHERE CAST(date as time(0)) ='09:12:00'