DKM
DKM

Reputation: 1799

Python Oracle SQL script pass argument by using same variable at once

I'm running a Oracle SQL script in using python pandas and wanted to pass a variable using {}.format(var). the thing is I don't want to pass the same variable for the count of braces like {}{}{}.format(var1,var1,var1). However this should work like {}{}{}.format(var1).

is there a way to do this? Here is my SQL Script: So in place of '2018-05-01', I want to pass one variable and '2018-05-30' second variable.

    SELECT * FROM (SELECT SUBSTR(PLACEMENT_DESC,1,INSTR(PLACEMENT_DESC, '.', 1)-1) AS PLACEMENT#, TO_CHAR(SDATE, 'YYYY-MM-DD') AS START_DATE, 
TO_CHAR(EDATE, 'YYYY-MM-DD') AS END_DATE, INITCAP(CREATIVE_DESC)  AS PLACEMENT_NAME, COST_TYPE_DESC AS COST_TYPE, 
UNIT_COST AS UNIT_COST, BUDGET AS PLANNED_COST, BOOKED_QTY AS BOOKED_IMP#BOOKED_ENG FROM TFR_REP.SUMMARY_MV
WHERE (IO_ID = {})
     AND (DATA_SOURCE = 'KM')
     AND (TO_CHAR(SDATE, 'YYYY-MM-DD') BETWEEN
     (CASE WHEN '2018-05-01' BETWEEN TO_CHAR(SDATE, 'YYYY-MM-DD') AND TO_CHAR(EDATE, 'YYYY-MM-DD') THEN TO_CHAR(SDATE, 'YYYY-MM-DD')
      ELSE (CASE WHEN '2018-05-01' < TO_CHAR(SDATE, 'YYYY-MM-DD') AND '2018-05-01' <= TO_CHAR(EDATE, 'YYYY-MM-DD') THEN TO_CHAR(SDATE, 'YYYY-MM-DD')
            ELSE TO_CHAR(SDATE, 'YYYY-MM-DD') END)
      END)
     AND
     (CASE WHEN '2018-05-30' BETWEEN TO_CHAR(SDATE, 'YYYY-MM-DD') AND TO_CHAR(EDATE, 'YYYY-MM-DD') THEN '2018-05-30'
      ELSE (CASE WHEN '2018-05-30' > TO_CHAR(EDATE, 'YYYY-MM-DD') AND '2018-05-01' <= TO_CHAR(SDATE, 'YYYY-MM-DD') THEN TO_CHAR(EDATE, 'YYYY-MM-DD')
            ELSE TO_CHAR(EDATE, 'YYYY-MM-DD') END)
      END))
     AND
     (TO_CHAR(EDATE, 'YYYY-MM-DD') BETWEEN
     (CASE WHEN '2018-05-01' BETWEEN TO_CHAR(SDATE, 'YYYY-MM-DD') AND TO_CHAR(EDATE, 'YYYY-MM-DD') THEN '2018-05-01'
      ELSE (CASE WHEN '2018-05-01' < TO_CHAR(SDATE, 'YYYY-MM-DD') AND '2018-05-01' <= TO_CHAR(EDATE, 'YYYY-MM-DD') THEN TO_CHAR(SDATE, 'YYYY-MM-DD')
            ELSE TO_CHAR(SDATE, 'YYYY-MM-DD') END)
      END)
     AND
     (CASE WHEN '2018-05-30' BETWEEN TO_CHAR(SDATE, 'YYYY-MM-DD') AND TO_CHAR(EDATE, 'YYYY-MM-DD') THEN TO_CHAR(EDATE, 'YYYY-MM-DD')
      ELSE (CASE WHEN '2018-05-30' > TO_CHAR(EDATE, 'YYYY-MM-DD') AND '2018-05-01' <= TO_CHAR(SDATE, 'YYYY-MM-DD') THEN TO_CHAR(EDATE, 'YYYY-MM-DD')
            ELSE TO_CHAR(EDATE, 'YYYY-MM-DD') END)
      END))
     AND CREATIVE_DESC IN(SELECT DISTINCT CREATIVE_DESC
                          FROM TFR_REP.SUMMARY_MV))
WHERE Placement_Name Not LIKE '%Pre-Roll%' and  Placement_Name Not LIKE '%Pre–Roll%'

Upvotes: 0

Views: 83

Answers (1)

zipa
zipa

Reputation: 27869

This might be what you are looking for:

a = 'first'
b = 'second'

'{0} {0} {0} {1}'.format(a, b)
#first first first second

Upvotes: 1

Related Questions