SQL选择不返回值

SQL选择不返回值,sql,select,casting,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 nvarcha

我在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

以下是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+答案,它使用格式来减少毫秒数并作为字符串进行比较

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'

假设您使用的是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'   
MySQL 使用date_format函数删除毫秒部分:

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
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
SQL Server 使用dateadd中的技巧通过减去毫秒来省略毫秒:

DATEADD(ms, -DATEPART(ms, CreatedDate), CreatedDate)
因此,您的查询现在看起来:

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
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
补充说明:

您不需要在整数值idUser周围使用倒逗号
为了提供帮助,我们需要查看一些数据和列的定义,即数据类型、长度等。正如您所说,语法是正确的,因此它必须与数据相关。那么您的数据是什么样子的?可能没有匹配项删除where子句。。。。以WHERE idUser='7'为例开始。。通过这种方式,您将看到错误在哪里,将您的问题与您正在使用的数据库标记在一起;此外,请解释“不工作”的含义。您无权访问列值的最后3位是什么意思OSQLServer2012答案工作正常!谢谢,我正在SQL中开始我的生活,但还不知道它的可能性!欢迎您,如果您进入庞大的数据集,您可能需要日期1或使用类似的方法来提高性能,但这将是一个不同的问题。干杯