Excel 2016 - 将日期参数值传递给SQL查询

时间:2018-04-16 14:08:31

标签: sql excel parameters

我有以下SQL语句,我想用从Excel中的表传递的参数替换日期值(以使最终用户更容易):

SELECT * FROM

( SELECT TEMP.BNH_PROCESSING_GRP, TEMP.BNH_SUPPLIER_NO, TEMP.BNH_PROCESSING_FLAG, TEMP.BNH_CREATE_DT, TEMP.BNH_TIER1_USER_ID, TEMP.BNH_TIER1_NAME, TEMP.BNH_TIER1_MAINT_DT, TEMP.BNH_TIER2_USER_ID, TEMP.BNH_TIER2_NAME,
     TEMP.BNH_TIER2_MAINT_DT, TEMP.BNH_TIER3_USER_ID, TEMP.BNH_TIER3_NAME,

     ( SELECT MAX(ABA_bank_H.BNH_TIER3_MAINT_DT) FROM ABA_bank_H WHERE ABA_bank_H.BNH_SUPPLIER_NO = TEMP.BNH_SUPPLIER_NO ) AS T3DATE,

     TEMP.BNH_BANK_NO, TEMP.BNH_BRANCH_NO, TEMP.BNH_REFERENCE_ROLL_NO, TEMP.BNH_CHECKING_SAVINGS, TEMP.BNH_T_RECORD_TYPE, TEMP.BNH_BANK_CONTROL_DIGIT, TEMP.BNH_ROUTING_TRANSIT, TEMP.BNH_ACCOUNT_NO, TEMP.BNH_IBAN,
     TEMP.BNH_SWIFT_CD, TEMP.BNH_ACCT_DESC

FROM ABA_bank_H AS TEMP

WHERE TEMP.BNH_PROCESSING_GRP = 'CZE' AND TEMP.BNH_PROCESSING_FLAG='O'

UNION

SELECT BNH_PROCESSING_GRP, BNH_SUPPLIER_NO, BNH_PROCESSING_FLAG, BNH_CREATE_DT, BNH_TIER1_USER_ID, BNH_TIER1_NAME, BNH_TIER1_MAINT_DT, BNH_TIER2_USER_ID, BNH_TIER2_NAME,
     BNH_TIER2_MAINT_DT, BNH_TIER3_USER_ID, BNH_TIER3_NAME, BNH_TIER3_MAINT_DT AS T3DATE, BNH_BANK_NO, BNH_BRANCH_NO, BNH_REFERENCE_ROLL_NO, BNH_CHECKING_SAVINGS,
     BNH_T_RECORD_TYPE, BNH_BANK_CONTROL_DIGIT, BNH_ROUTING_TRANSIT, BNH_ACCOUNT_NO, BNH_IBAN, BNH_SWIFT_CD, BNH_ACCT_DESC

FROM ABA_bank_H

WHERE BNH_PROCESSING_GRP = 'CZE' AND BNH_PROCESSING_FLAG='H'
)
ABA_bank_H
WHERE T3DATE BETWEEN '2018-03-01' AND '2018-03-31'
Order by BNH_PROCESSING_GRP, BNH_SUPPLIER_NO, BNH_PROCESSING_FLAG, BNH_CREATE_DT

我在一个名为'Parameters'的单独标签中创建了一个表

Parameter   Value

StartDate   2018-03-01

EndDate         2018-03-31

我有以下Get参数功能:

(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"Value")
in
Value

我将以下内容添加到查询的高级编辑器中:

sStartDate = fnGetParameter("StartDate"),
sEndDate = fnGetParameter("EndDate"),

并更改了SQL语句,如下所示:

...WHERE T3DATE BETWEEN  'sStartDate' AND 'sEndDate' #(lf)  Order by...

我认为日期格式错误,但我不知道如何解决这个问题:

  

“从字符转换日期和/或时间时转换失败   字符串“

您能帮助我解决我的问题,或者推荐一种不同的方法吗?

0 个答案:

没有答案