如何使用BUILTIN.PERIOD查询最近7天的客户发票?
解决NetSuite SuiteQL查询最近7天客户发票的问题
问题根源
你的SQL执行失败主要有两个原因:
- 期间代码选错了:
SDLW(即SAME_DAY_LAST_WEEK)仅对应上周的同一天,根本不是你要的「最近7天」日期范围。 - 语法逻辑错误:
BUILTIN.PERIOD返回的是日期范围值,不能用IN来匹配,得用BETWEEN或者>=/<=这类范围比较符。
BUILTIN.PERIOD的正确用法
NetSuite SuiteQL里的BUILTIN.PERIOD是用来生成预定义日期/期间范围的函数,标准参数格式是:
BUILTIN.PERIOD('<期间代码>', '<起止标识>', '<范围>', '<可选操作符>')
核心参数解释:
- 期间代码:常用的有这些:
LAST_7_DAYS:最近7天(包含当日)LAST_WEEK:上周完整一周SDLW:上周的同一天
- 起止标识:填
START拿范围起始日期,填END拿结束日期 - 范围:一般填
ALL表示取完整期间 - 可选操作符:比如
>可用来调整范围边界(比如大于起始日期)
符合需求的正确SQL
如果要查**最近7天(含当日)**的客户发票,直接用LAST_7_DAYS作为期间代码,搭配范围比较:
SELECT T.* FROM Transaction AS T WHERE T.type = 'CustInvc' AND T.trandate BETWEEN BUILTIN.PERIOD('LAST_7_DAYS', 'START', 'ALL') AND BUILTIN.PERIOD('LAST_7_DAYS', 'END', 'ALL')
要是需要排除当日,只查前7天,加个操作符调整:
SELECT T.* FROM Transaction AS T WHERE T.type = 'CustInvc' AND T.trandate >= BUILTIN.PERIOD('LAST_7_DAYS', 'START', 'ALL', '<')
顺便说下SDLW的正确用法
如果你的需求其实是查上周同一天的发票,写法应该是这样:
SELECT T.* FROM Transaction AS T WHERE T.type = 'CustInvc' AND T.trandate = BUILTIN.PERIOD('SDLW', 'START', 'ALL')
内容的提问来源于stack exchange,提问作者Tyson Freeze
相关产品推荐
相关产品推荐

