【问题标题】:Select row by specifying date column通过指定日期列选择行
【发布时间】:2012-06-04 23:50:50
【问题描述】:

我的表中有这条记录

Name   UserName     Password     DateAdded
skype  someusername somepassword 05/06/2012 01:18:50

我正在尝试执行此语句,但它总是失败。

一些尝试:(全部失败)

Select * from Passwords where DateAdded = '05/06/2012 01:18:50'
Select * from Passwords where DateAdded = #05/06/2012 01:18:50#
Select * from Passwords where DateAdded = '06/05/2012 01:18:50'
Select * from Passwords where DateAdded = '2012/06/05 01:18:50'
Select * from Passwords where DateAdded = '2012/05/06 01:18:50'
Select * from Passwords where DateAdded like '2012/06/05 01:18:50'

我数据库中的列DateAdded 的类型是datetime 而不是nvchar

我是 SQL 新手,这个查询有什么问题?

【问题讨论】:

  • 当您说fails 时,实际发生了什么?您收到错误消息吗?它说什么?是意想不到的结果吗?它们是什么?
  • 如果你没有得到任何结果,这可能是因为 DateTime 类型比一秒更精确(低至数千秒),所以除非你很幸运并且碰巧得到一个没有小数秒的插入,或者碰巧在插入时手动指定了日期,您的查询不会得到任何结果。对于 DateTime,您通常使用 或 BETWEEN,除非您专门截断输入的 DateTime,以便您可以知道,例如,您不必担心小数秒。
  • 我试了一下,但没有用,问题是它返回 0 行没有任何反应。为了使它工作,我必须使用 > 而不是 = 这是错误的。
  • 所以为了让它工作我应该在 ? 之间使用
  • 这取决于你在做什么。可以在插入之前或插入时修剪掉小数秒。也可以在比较时修剪查询中的小数秒,但这会降低性能。您能否更新您的帖子,说明您需要运行精确到秒的查询的原因,或者更一般地说您正在尝试做什么?

标签: sql sql-server date select sql-server-ce


【解决方案1】:

您能否存储小数秒?试试这个:

SELECT * FROM Passwords
    WHERE DateAdded BETWEEN '2012-05-06 01:18:50' AND '2012-05-06 01:18:51';

(我更喜欢这种格式的日期时间文字,因为它是明确的,但你的应该也可以。Tsql 将采用almost anything you throw at it

【讨论】:

  • 仍然一无所获.. 总是得到 0 条记录。
  • CmdString.CommandText = "从密码中选择 *,其中 DateAdded BETWEEN '2012/05/06 01:18:50' AND '2012/05/06 01:18:50'" DS.Clear( ) '清除数据集 TA.Fill(DS, "MyTable") '重新填充我的表 BS.DataSource = DS.Tables("MyTable") '分配绑定源 BindControls() '绑定我的控件文本框标签..
  • 你能试着确定它认为的确切日期吗?例如,尝试使用 WHERE DateAdded > '2012-05-06 01:18:50'。如果它在那里,然后尝试 WHERE DateAdded > '2012-05-07 01:18:50'。如果它在那里,则将其退回到,例如 WHERE DateAdded > '2012-05-06 13:18:50'。通过排除过程,如果您能弄清楚 SQL Server 认为的日期和时间,您可能会弄清楚为什么它会给您带来意想不到的结果。也许它与时区转换或日期格式有关。
  • 您可以尝试使用某种直接数据库接口而不是先通过您的代码直接查询数据库吗?验证查询和数据是否有效。如果是这样,那么找出你的代码有什么问题。我在您的查询或数据中看不到任何会导致此操作失败的内容。
  • 我尝试通过选择作为我的 ID 列整数值的列来执行它。如果使用 Select * from Passwords where ID=4 ,则相同的代码有效。选择 DateTime 字段时出现问题。我试过你说的例子 DateAdded >'2012/05/06 01:18:50' 并且它有效但使用不正确>因为我只想返回一条记录
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多