我有一个包含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
类型)?
答案 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
而不是datetime
或date
,请考虑添加time
列,例如由于需要在不必要的行上运行转换以确定是否应该包含它们,因此上述效率往往较低。也许计算列也可以帮助解决这个问题。