Postgresql SQL强制转换日期与日期时间

Postgresql SQL强制转换日期与日期时间,postgresql,datetime,Postgresql,Datetime,当我编写SQL脚本以使用DateTime字段查找日期范围时,例如在“2018年1月1日”和“2018年7月31日”之间,我总是这样做: start_date >='2018-01-01' and end_date < '2018-08-01' start_date >='2018-01-01' and end_date <='2018-07-31' 然后,他们将所有日期范围写为: start_date >='2018-01-01' and e

当我编写SQL脚本以使用DateTime字段查找日期范围时,例如在“2018年1月1日”和“2018年7月31日”之间,我总是这样做:

   start_date >='2018-01-01' and end_date < '2018-08-01'
    start_date >='2018-01-01' and end_date <='2018-07-31'
然后,他们将所有日期范围写为:

   start_date >='2018-01-01' and end_date < '2018-08-01'
    start_date >='2018-01-01' and end_date <='2018-07-31'

开始日期>='2018-01-01'和结束日期我更喜欢你的方式。仅仅为了做一个比较,铸造每一张唱片似乎很昂贵。这就是说,如果他们只是将字符串文本转换为日期
'2018-07-31'::date end_date
,那么这是一个清洗。但是将DateTime转换为日期是否会得到所需的输出,包括整个“2018-07-31”的日期?首先,请准确地说,postgres中没有“DateTime”类型的东西,代码
'2018-07-31'::date end_date
似乎没有意义-您是想说他们将表字段强制转换为
date
,而不是将文本字符串强制转换为
date
?如果是这样的话,强制转换字段值肯定是一个坏主意,因为这将阻止它使用该字段的索引(假设为标准索引)。假设字段类型为
timestamp
,并且您希望获得2018-01-01和2018-0731(inc)之间的值,请执行:
字段介于'2018-01-01'和'2018-07-31 23:59:59'之间的操作。
或类似操作。将时间戳转换为日期基本上会截断字段的时间成分以进行比较(这是一项昂贵的操作,会导致@eurotrash提到的索引被避免)如果字段是timestamp,并且它们在
start_date::date>='2018-01-01'和end_date::date='2018-01-01 00:00:00'和end_date<'2018-08-01 00:00:00'
中,我将避免在其中添加日期文字,以避免意外地隐式转换字段。@eurotrash--我的意思是“timestamp”。我仍然习惯SQL Server