我目前正在查看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))
我对如何解释最后两行的理解是
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版本。
答案 0 :(得分:2)
不太。
其中的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)
答案 1 :(得分:0)
如果不使用SQL Server,则使用FoxPro显式日期格式而不是字符串会更快。也就是说,{^ 2018-01-01}而不是“ 2018-01-01”。
错误率也较低,因为根据FoxPro日期设置,字符串可能以不同的方式解释。
要记住的另一件事是FoxPro表同时具有Date和Datetime数据类型。日期是必不可少的(意味着精确的比较是可靠的),但是IIRC(后者具有亚毫秒级的分辨率)。同样,在IIRC中,当将两者进行比较时,FoxPro只是将Datetime截断为Date,因此要小心意外的结果。