我在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
答案 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)
使用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
使用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)