我有一个MySQL表,其中列表示在这种格式的特定时间戳:“YYYY-MM-DD HH:MM:SS.SSS”类型的列的是串范围查询
如果我想选择两个日期之间的那些行(“yyyy-MM-dd”),该怎么办?是否有可能不更改列日期时间的列类型?
我有一个MySQL表,其中列表示在这种格式的特定时间戳:“YYYY-MM-DD HH:MM:SS.SSS”类型的列的是串范围查询
如果我想选择两个日期之间的那些行(“yyyy-MM-dd”),该怎么办?是否有可能不更改列日期时间的列类型?
select *
from mytable
where ts between '2016-10-01' and '2016-10-15 z'
应该工作,因为 'Z' 比任何数字 “更大”。不过,这将是“更清洁”的使用
where ts between '2016-10-01 00:00:00.000' and '2016-10-15 23:59:59.999'
更新:
在一般情况下,如果(例如)要选择日期范围内的任何时间戳记2016-10-01
到2016-10-15
,你start_str
和end_str
必须符合以下规则:
'2016-09-30 23:59:59.999' < start_str <= '2016-10-01 00:00:00.000'
'2016-10-15 23:59:59.999' <= end_str < '2016-10-16 00:00:00.000'
为start_str
一些可能的值:
'2016-10-01'
'2016-10-01 00:00:00'
'2016-10-01 00:00:00.000'
'2016-09-30 24'
'2016-09-30 3'
为end_str
一些可能的值:
'2016-10-15 23:59:59.999'
'2016-10-15 23:59:59.999999'
'2016-10-15 24'
'2016-10-15 3'
'2016-10-15 a'
'2016-10-15 z'
'2016-10-16'
要回答在评论你的问题:您可以通过开始日期的字符串表示,但你不能与结束日期做。在字符串比较方面,2016-10-15
小于2016-10-15 23:59:59.999
,因此它会违反规则'2016-10-15 23:59:59.999' <= end_str
,您将过滤掉当天的任何时间戳。
Additionaly - 如果你使用的follwing条件之一
where ts between '2016-10-01' and '2016-10-15 23:59:59.999999'
where ts between '2016-10-01 00:00:00' and '2016-10-15 23:59:59.999999'
您可以将数据类型更改为TIMESTAMP(3)
或TIMESTAMP(6)
后和尤尔查询仍然可以工作。
如果您的日期范围来自一些其他的表,你会需要一个串联
select *
from timestamps t
join dateranges r
on t.ts between r.start_date and concat(r.end_date, '23:59:59.999999')
where r.some_column = 'some_value'
你可以使用STR_TO_DATE的格式YYY-MM-DD HH:MM:SS.SSS
select * from my_table
where str_to_date(my_column, '%Y-%m-%d %h:%i:%s.$f')
between str_to_date('01-01-2016 00:00:00' , '%d-%m-%Y HH:mm:ss')
and str_to_date('31-12-2016 23:59:59' , '%d-%m-%Y HH:mm:ss') ;
使用
select *
from tableName
where date between 'yyyy-MM-dd' and 'yyyy-MM-dd';
如果你要搜索定义的结果包括日期,你应该在to
添加1
日期(结束日期)。
这就是我通常使用TIMESTAMP和DATETIME列:
select *
from mytable
where ts >= '2016-10-01'
and ts < '2016-10-15' + interval 1 day
这也将与字符串列工作,aslong你存储在正确的格式的时间戳。
select * from tablename where columnname between '2016-10-01' and '2016-10-15 z'
是“z”意图还是打字错误? – Sliq
欢迎来到Stack Overflow!尽管这段代码可能会解决这个问题,其中包括* how *和* why *的解释,这可以解决问题[真的有所帮助](// meta.stackexchange.com/q/114762)来提高帖子的质量。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –
添加格式,所以我只是要传递字符串日期到我的查询? –
@lorisstefano - 希望更新不会影响您的问题。另请参阅我的其他答案。 –