【问题标题】:Selecting records between two dates [closed]在两个日期之间选择记录[关闭]
【发布时间】:2013-03-11 13:20:19
【问题描述】:

Ive 列 CREATEDDATE ( DATETIME ) 我需要找到两个日期之间的所有行 $startDate $endDate 格式 ('d/m/Y') ?

SELECT * FROM TABLE 
 WHERE CREATEDDATE >= CONVERT(DATETIME, $startDate, 103)
 AND CREATEDDATE <= CONVERT(DATETIME, $endDate, 103)

http://sqlfiddle.com/#!3/b0478/5问题出在哪里?!

【问题讨论】:

  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!
  • +1 以获得良好的响应和解释......
  • 当问题更新并提供 sqlfiddle 时,我知道第一次关闭投票,但不是最后一次。

标签: sql sql-server sql-server-2005


【解决方案1】:

这很简单,可以通过谷歌搜索找到..
在提问之前你应该先谷歌..

Select * From Tbl where CREATEDDATE between $date1 and  $date2 

如果 $date1 是varchar,那么你必须使用CONVERT(DATETIME, $date1, 103)(对于'd/m/y')
sql中的日期时间转换可以参考this link..

解决方法如下:

updated Fiddle

【讨论】:

  • 对不起,它不起作用..
  • this answer 有一个相当长的评论关于使用 between 的陷阱。
  • @Myaw “对不起,但它不起作用”信息量不是很大。用什么不起作用更新您的问题。顺便说一句,日期没有格式。字符串可以,但您肯定没有字符串数据类型中的日期吗?
  • 我也试过了,还是不行……从表中选择 * 在 CONVERT(DATETIME, $startDate, 103) 和 CONVERT(DATETIME, $endDate, 103) 之间创建日期
  • $startdate 是什么?
【解决方案2】:

sqlfiddle 中的真正问题是您在变量声明中将字符串转换为日期,但 sql 语句:

declare @FromDate datetime = '11/03/2013'  --here a type casting!!
declare @ToDate datetime = '12/03/2013'

那么这就没有效果了:

xCreatedDate < convert(datetime,@ToDate,103)  --@toDate is yet a date!!

要修复,请在变量声明中将日期时间更改为日期:

declare @FromDate varchar(10) = '11/03/2013'  --here without casting!!
declare @ToDate varchar(10) = '12/03/2013'

【讨论】:

    【解决方案3】:
    select CREATEDDATE from table where CREATEDDATE BETWEEN $date1 AND $date2
    

    或者你可以使用

    select CREATEDDATE from table where CREATEDDATE > $date1 AND CREATEDDATE < $date2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 2017-02-03
      • 2014-04-11
      相关资源
      最近更新 更多