Foxpro 中间条款

Foxpro Between Clause

我目前正在查看 foxpro 查询,又名 if SQL 喝醉了,我需要帮助了解一些东西是如何工作的,因为我对 foxpro 是全新的。

SELECT keyfld, SUBSTR(CCB_SERIAL,11,2) AS a ;
FROM g:\mirror\DBFS\CCB ;
WHERE 
(BETWEEN({^2018-01-01},pl_st_dt, pl_end_dt) or 
BETWEEN({^2018-03-31},pl_st_dt,pl_end_dt)) 

我对如何解释最后两行的理解是

where
     pl_st_dt >= '2018-01-01' OR
     pl_end_dt >= '2018-01-01' OR
     pl_st_dt <= '2018-03-31' OR
     pl_end_dt <= '2018-03-31'

对吗?

我正在尝试进行 foxpro 查询并编写等效的 t-sql 版本。

不完全是。

BETWEEN 相当于:

({^2018-01-01} BETWEEN pl_st_dt and pl_end_dt) or 
({^2018-03-31} BETWEEN pl_st_dt and pl_end_dt)

所以你的等效项是:

WHERE
  (pl_st_dt <= '2018-01-01' AND '2018-01-01' <= pl_end_dt)
  OR
  (pl_st_dt <= '2018-03-31' AND '2018-03-31' <= pl_end_dt)

如果您不与 SQL 服务器通信,使用 FoxPro 显式日期格式比使用字符串会更快。也就是说,{^2018-01-01} 而不是 '2018-01-01'。

也不太容易出错,因为根据 FoxPro 日期设置,字符串可能会以不同的方式解释。

另一件要记住的事情是 FoxPro 表同时具有日期和日期时间数据类型。日期是完整的(意味着精确比较是可靠的),但 IIRC,后者具有亚毫秒分辨率。同样,IIRC,在比较两者时,FoxPro 只是将日期时间截断为日期,因此请注意意外结果。