我目前正在查看foxpro查询,也就是如果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)) 我对如何解释底部2行的理解是
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版本。
发布于 2018-11-27 15:31:41
不完全是。
两者之间相当于:
({^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)发布于 2018-12-21 15:59:29
如果不与Server对话,则使用FoxPro显式日期格式比使用字符串更快。也就是说,{^2018-01-01}而不是'2018-01-01‘。
也不容易出错,因为字符串可能会根据FoxPro日期设置以不同的方式进行解释。
要记住的另一件事是,FoxPro表具有日期和日期时间数据类型。日期是积分的(意思是精确的比较是可靠的),但是IIRC,后者有亚毫秒的分辨率。同样,在比较这两种情况时,FoxPro只是将一个日期时间截断为一个日期,所以要小心意外的结果。
https://stackoverflow.com/questions/53502781
复制相似问题