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 只是将日期时间截断为日期,因此请注意意外结果。
我目前正在查看 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 只是将日期时间截断为日期,因此请注意意外结果。