日期/时间与日期和时间的不同文件之间的SQL查询

时间:2015-07-13 15:57:07

标签: sql sql-server date datetime time

我有一个包含2个字段的SQL Server 2014数据库:   - 记录日期类型date之一   - 记录时间类型time之一。

我想在2个日期/时间之间从表中检索记录。 示例:2015-01-01 16:00至2015-01-02 08:00。

我试过

SELECT...
Date BETWEEN '2015-01-01' AND '2015-01-02'
AND Time BETWEEN '16:00' AND '08:00'

这正如预期的那样失败。

我可以按照自己的意愿行事吗,或者只使用单个字段作为日期和时间(datetime类型)?

3 个答案:

答案 0 :(得分:1)

尝试添加字段:

WHERE cast(date as datetime)+cast(time as datetime) between
'2015-01-01 16:00' AND '2015-01-02 8:00'

答案 1 :(得分:1)

只有在特定日期之间的某个时间窗口内查找记录时,您的查询才有效。例如。在7月13日至17日的办公时间内。

WHERE [Date] BETWEEN '2015-07-13' AND '2015-07-17'
AND CONVERT(Time, [Time]) BETWEEN '08:00' AND '16:00'

由于您的起始Time值大于结束时间值,因此在将日期和时间合并为一个值之前,您将无法获得任何结果:

WHERE CONVERT(DateTime, [Date]) + CONVERT(DateTime, [Time])
BETWEEN '2015-01-01 16:00' AND '2015-01-02 08:00'

答案 2 :(得分:0)

您可以连接,然后将这些字段一起转换为 EditText text = (EditText) findViewById(R.id.text); if (Build.VERSION.SDK_INT >= 11) { text.setRawInputType(InputType.TYPE_CLASS_TEXT); text.setTextIsSelectable(true); } else { text.setRawInputType(InputType.TYPE_NULL); text.setFocusable(true); } ,如下所示:

datetime

请注意,我假设您的日期位于select * from thing where convert(datetime, convert(varchar(10), myDate) + ' ' + convert(varchar(10), myTIme)) between '2015-01-01 00:00:00' and '2015-01-02 01:01:00' 列,而您的时间位于date

见小提琴:

http://sqlfiddle.com/#!6/3a308/8

如果您的大部分查询都是time而不是datetimedate,请考虑添加time列,例如由于需要在不必要的行上运行转换以确定是否应该包含它们,因此上述效率往往较低。也许计算列也可以帮助解决这个问题。