条款之间的Foxpro

时间:2018-11-27 15:20:18

标签: sql-server tsql foxpro

我目前正在查看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版本。

2 个答案:

答案 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,因此要小心意外的结果。