SQL SELECT不返回值

时间:2016-09-15 19:35:01

标签: sql select casting

我在SQL中有以下查询:

SELECT idPass
FROM Notes
WHERE CAST(CreatedDate AS nvarchar) LIKE '2016-07-30 17:19:10%'
AND CreatedBy='César Caldeira - CEC'
AND idUser='7'

我是SQL的菜鸟;这没有语法错误,但我不知道如何使它工作?

有什么建议吗?

这是我的表结构:

idPass int
CreatedDate datetime
CreatedBy nvarchar(50)
idUser int

问题是datetime的格式为yyyy-mm-ss.mmm而且我无法访问日期的最后3位数字,因此我无法使用CreatedDate = somedate

3 个答案:

答案 0 :(得分:0)

这是一个sql-server答案,它将去掉毫秒(最后3位数)并比较为日期。

SELECT idPass
FROM Notes
WHERE DATEADD(ms,- DATEPART(ms,CreatedDate),CreatedDate) = CAST('2016-07-30 17:19:10' AS DATETIME)
AND CreatedBy='César Caldeira - CEC'
AND idUser='7'

这是一个SQL Server 2012+答案,它使用FORMAT来删除毫秒并作为字符串进行比较。

SELECT idPass
FROM Notes
WHERE FORMAT(CreatedDate ,'yyyy-MM-dd HH:mm:ss') = '2016-07-30 17:19:10'
AND CreatedBy='César Caldeira - CEC'
AND idUser='7'

答案 1 :(得分:0)

假设您正在使用Sql Server,

SELECT idPass
FROM Notes
where CAST(CreatedDate as date) = '2016-07-30' 
    and DATEPART( hh, CreatedDate) = 17 
    and DATEPART( mi, CreatedDate) = 19 
    and DATEPART( ss, CreatedDate) = 10
AND CreatedBy='César Caldeira - CEC'
AND idUser='7'   

答案 2 :(得分:0)

的MySQL

使用date_format()函数摆脱miliseconds部分:

DATE_FORMAT(CreatedDate, '%Y-%m-%d %H:%i:%s')

所以你的查询现在看起来是:

SELECT idPass
FROM Notes
WHERE DATE_FORMAT(CreatedDate, '%Y-%m-%d %H:%i:%s') = '2016-07-30 17:19:10'
  AND CreatedBy = 'César Caldeira - CEC'
  AND idUser = 7

SQL Server

使用dateadd()中的技巧通过减去它们来省略毫秒:

DATEADD(ms, -DATEPART(ms, CreatedDate), CreatedDate)

所以你的查询现在看起来是:

SELECT idPass
FROM Notes
WHERE DATEADD(ms, -DATEPART(ms, CreatedDate), CreatedDate) = '2016-07-30 17:19:10'
  AND CreatedBy = 'César Caldeira - CEC'
  AND idUser = 7

附加说明:

  • 您不需要在Integer值(idUser)
  • 周围使用引号