exp使用to_date

1) where前面要带双引号
2) to_date参数需要从单引号变成双音号
3) exp支持的userid格式 username/userpassword@tnsname ,
不支持 username@tnsname/userpassword格式
eg:
exp userid=test/test@ora92 file=t_test.dmp buffer=40768000 tables=(t_test) query='"where time1>=to_date(''20070601'',''yyyymmdd'') and time2

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10599713/viewspace-928663/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10599713/viewspace-928663/

CREATE OR REPLACE TYPE t_hisdata AS TABLE OF varchar2(10000); / create or replace function exp_hisdata(exp_date date default null) return t_hisdata pipelined as hs_col_names varchar2(10000); stat_col_names varchar2(32767); hs_sql varchar2(10000); stat_sql varchar2(10000); stat_table_name varchar2(64); -- hs_result varchar2(10000); begin_date date; end_date date; i int; --CREATE TYPE t_hisdata AS TABLE OF varchar2(10000); hs_result t_hisdata; stat_result t_hisdata; --exp_result t_hisdata; cursor c_htab is select distinct (history_table_name) from svr_yc_sample_define where first_define_time <= to_date('2013-04-08 10:37:57', 'yyyy-mm-dd hh24:mi:ss') --where history_table_name in ('yc_hs_000123') order by history_table_name; begin if exp_date is null then --dbms_output.put_line('exp date is null'); return; end if; begin_date := to_date(substr(to_char(exp_date, 'yyyy-mm-dd hh24:mi:ss'), 1, 10) || ' 00:00:00', 'yyyy-mm-dd hh24:mi:ss'); end_date := to_date(substr(to_char(exp_date, 'yyyy-mm-dd hh24:mi:ss'), 1, 10) || ' 23:59:59', 'yyyy-mm-dd hh24:mi:ss'); --dbms_output.put_line('begin date is ''' || begin_date || -- ''' end_date is ''' || end_date || ''''); for c1 in c_htab loop --dbms_output.put_line(c1.history_table_name);\ --yc_hs_000123 hs_col_names := null; for i in 1 .. 100 loop if hs_col_names is not null then hs_col_names := hs_col_names || '||'',''||' || 'cur_' || replace(to_char(i, '000'), ' ', '') || '||'',''||' || 'sta_' || replace(to_char(i, '000'), ' ', ''); else hs_col_names := 'cur_' || replace(to_char(i, '000'), ' ', '') || '
03-28
# straddle_strategy_backtest.py import backtrader as bt import pandas as pd import akshare as ak import time import numpy as np from datetime import timedelta import scipy.stats as stats from typing import Optional import matplotlib.pyplot as plt import matplotlib.dates as mdates # 设置中文字体支持 plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"] plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题 # ======= 配置参数 ======= CONFIG = { "MAX_RETRIES": 3, "INITIAL_DELAY": 5, "ETF_SYMBOL": "510300", # 沪深300ETF代码 "START_DATE": "2022-01-01", "END_DATE": "2023-01-01", "INITIAL_CAPITAL": 100000, "RISK_PER_TRADE": 0.03, "COMMISSION_RATE": 0.0003, "SLIPPAGE_RATE": 0.0005, "TECHNICAL_WINDOW": 20, "OPTION_EXPIRY_MONTHS": 12, "NUM_CONTRACTS": 5 # 同时买入5份看涨+看跌期权 } # ======= 重试装饰器 ======= def retry(func): def wrapper(*args, **kwargs): for attempt in range(CONFIG["MAX_RETRIES"]): try: return func(*args, **kwargs) except Exception as e: delay = CONFIG["INITIAL_DELAY"] * (2 ** attempt) print(f"[重试 {attempt + 1}/{CONFIG['MAX_RETRIES']}] 延迟{delay}秒,错误: {str(e)}") time.sleep(delay) raise RuntimeError("多次重试失败") return wrapper # ======= 获取标的ETF历史数据 ======= @retry def fetch_etf_data(symbol: str, start_date: str, end_date: str) -> pd.DataFrame: df = ak.fund_etf_hist_em(symbol=symbol) df['日期'] = pd.to_datetime(df['日期']) df = df[(df['日期'] >= start_date) & (df['日期'] <= end_date)] df.rename(columns={ '日期': 'datetime', '开盘': 'open', '最高': 'high', '最低': 'low', '收盘': 'close', '成交量': 'volume' }, inplace=True) df['middle_band'] = df['close'].rolling(window=CONFIG["TECHNICAL_WINDOW"]).mean() df['std'] = df['close'].rolling(window=CONFIG["TECHNICAL_WINDOW"]).std() df['upper_band'] = df['middle_band'] + 2 * df['std'] df['lower_band'] = df['middle_band'] - 2 * df['std'] delta = df['close'].diff() gain = delta.where(delta > 0, 0) loss = -delta.where(delta < 0, 0) avg_gain = gain.rolling(CONFIG["TECHNICAL_WINDOW"]).mean() avg_loss = loss.rolling(CONFIG["TECHNICAL_WINDOW"]).mean() rs = avg_gain / avg_loss df['rsi'] = 100 - (100 / (1 + rs)) df['daily_return'] = df['close'].pct_change() df['volatility'] = df['daily_return'].rolling(CONFIG["TECHNICAL_WINDOW"]).std() * np.sqrt(252) df['iv_percentile'] = df['volatility'].rolling(window=100).rank(pct=True) * 100 df.dropna(inplace=True) df.reset_index(drop=True, inplace=True) return df # ======= ETF 数据类 ======= class ETFData(bt.feeds.PandasData): lines = ('iv_percentile', 'upper_band', 'lower_band', 'rsi') params = ( ('datetime', 'datetime'), ('open', 'open'), ('high', 'high'), ('low', 'low'), ('close', 'close'), ('volume', 'volume'), ('iv_percentile', 'iv_percentile'), ('upper_band', 'upper_band'), ('lower_band', 'lower_band'), ('rsi', 'rsi'), ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # type: ignore # ======= 期权数据处理类 ======= class OptionData: def __init__(self, symbol: str): self.symbol = symbol self.exp_dates = self._fetch_exp_dates() self.options_cache = {} @retry def _fetch_exp_dates(self) -> list: df = ak.option_finance_board(symbol=self.symbol) df['到期日'] = pd.to_datetime(df['到期日']).dt.strftime('%Y-%m-%d') exp_dates = sorted(df['到期日'].unique().tolist()) return exp_dates @retry def fetch_option_chain(self, exp_date: str) -> tuple: df = ak.option_finance_board(symbol=self.symbol) df['到期日'] = pd.to_datetime(df['到期日']).dt.strftime('%Y-%m-%d') option_data = df[df['到期日'] == exp_date] call_mapping = {'行权价': 'strike', '最新价': 'lastPrice', '成交量': 'volume'} calls = option_data[option_data['期权类型'] == '认购'].rename(columns=call_mapping).astype(float) puts = option_data[option_data['期权类型'] == '认沽'].rename(columns=call_mapping).astype(float) self.options_cache[exp_date] = (calls, puts) return calls, puts def get_atm_options(self, current_date: str, price: float) -> Optional[tuple]: target_date = (pd.to_datetime(current_date) + timedelta(days=30)).strftime('%Y-%m-%d') exp_date = min(self.exp_dates, key=lambda x: abs((pd.Timestamp(x) - pd.Timestamp(target_date)).days)) calls, puts = self.fetch_option_chain(exp_date) if calls.empty or puts.empty: return None, None, exp_date calls['strike_diff'] = abs(calls['strike'] - price) puts['strike_diff'] = abs(puts['strike'] - price) calls_filtered = calls[calls['strike_diff'] <= price * 0.02] puts_filtered = puts[puts['strike_diff'] <= price * 0.02] if calls_filtered.empty or puts_filtered.empty: return None, None, exp_date atm_call = calls_filtered.loc[calls_filtered['strike_diff'].idxmin()] atm_put = puts_filtered.loc[puts_filtered['strike_diff'].idxmin()] return atm_call, atm_put, exp_date # ======= Black-Scholes 定价模型 ======= def black_scholes( stock_price: float, strike: float, time_to_expiry: float, volatility: float, risk_free_rate: float = 0.02, option_type: str = 'call') -> float: d1 = (np.log(stock_price / strike) + (risk_free_rate + 0.5 * volatility ** 2) * time_to_expiry) / \ (volatility * np.sqrt(time_to_expiry)) d2 = d1 - volatility * np.sqrt(time_to_expiry) cdf = stats.norm.cdf if option_type == 'call': return stock_price * cdf(d1) - strike * np.exp(-risk_free_rate * time_to_expiry) * cdf(d2) else: return strike * np.exp(-risk_free_rate * time_to_expiry) * cdf(-d2) - stock_price * cdf(-d1) # ======= 跨式组合策略 ======= class StraddleStrategy(bt.Strategy): params = ( ('commission_rate', CONFIG["COMMISSION_RATE"]), ('slippage_rate', CONFIG["SLIPPAGE_RATE"]), ('technical_window', CONFIG["TECHNICAL_WINDOW"]), ) def __init__(self): self.etf_price = self.datas[0].close self.upper_band = self.datas[0].upper_band self.lower_band = self.datas[0].lower_band self.rsi = self.datas[0].rsi self.option_handler = OptionData(CONFIG["ETF_SYMBOL"]) self.custom_positions = {} self.trade_id = 0 self.equity = [CONFIG["INITIAL_CAPITAL"]] def next(self): current_date = self._get_current_date() cash = self.broker.getcash() if not self.custom_positions and cash > CONFIG["INITIAL_CAPITAL"] * 0.1: self._generate_signals(current_date) self._manage_positions(current_date) self.equity.append(self.broker.getvalue()) def _generate_signals(self, current_date: str): price = self.etf_price[0] atm_call, atm_put, exp_date = self.option_handler.get_atm_options(current_date, price) if atm_call is not None and atm_put is not None: print(f"[{current_date}] 发现平值期权:行权价={atm_call['strike']}") self._execute_order('call', atm_call, exp_date, price, current_date) self._execute_order('put', atm_put, exp_date, price, current_date) def _execute_order(self, option_type: str, option: pd.Series, exp_date: str, price: float, current_date: str): try: # 加入滑点:买入时价格提高 SLIPPAGE_RATE option_price = option['lastPrice'] * (1 + self.p.slippage_rate) if option_price <= 0: return risk_capital = self.broker.getvalue() * self.p.risk_per_trade size = max(1, int(risk_capital / (option_price * 100))) option_cost = option_price * size * 100 commission = option_cost * self.p.commission_rate total_cost = option_cost + commission if total_cost > self.broker.get_cash(): return self.trade_id += 1 self.custom_positions[self.trade_id] = { 'type': option_type, 'strike': option['strike'], 'expiry': exp_date, 'size': size, 'cost': total_cost, 'entry_price': option_price, 'entry_date': current_date } self.broker.setcash(self.broker.getcash() - total_cost) print(f"[{current_date}] 开仓{option_type}期权: 行权价={option['strike']:.2f}, 数量={size}, 成本={total_cost:.2f}元") except Exception as e: print(f"执行订单失败: {e}") def _manage_positions(self, current_date: str): to_close = [] for pos_id, pos in self.custom_positions.items(): days_left = (pd.to_datetime(pos['expiry']) - pd.to_datetime(current_date)).days if days_left <= 3: to_close.append(pos_id) continue profit_pct = self._calculate_profit(pos, current_date) if self._should_exit(pos, profit_pct): to_close.append(pos_id) for pos_id in to_close: self._close_position(pos_id) def _calculate_profit(self, pos: dict, current_date: str) -> float: days_left = (pd.to_datetime(pos['expiry']) - pd.to_datetime(current_date)).days time_to_expiry = max(days_left / 365, 0.001) vol = self.datas[0].iv_percentile[0] / 100 current_price = black_scholes( self.etf_price[0], pos['strike'], time_to_expiry, vol, 0.02, pos['type'] ) return (current_price - pos['price']) / pos['price'] * 100 def _should_exit(self, pos: dict, profit_pct: float) -> bool: if profit_pct >= 100 or profit_pct <= -50: print(f"达到止盈/止损条件,准备平仓") return True return False def _close_position(self, pos_id: int): pos = self.custom_positions.pop(pos_id, {}) if not pos: return profit_pct = self._calculate_profit(pos, pos['entry_date']) profit = profit_pct / 100 * pos['cost'] self.broker.setcash(self.broker.getcash() + pos['cost'] * (1 + profit_pct / 100)) print(f"[{pos['entry_date']}] 平仓{pos['type']}期权: 盈亏={profit:.2f}元") def _get_current_date(self) -> str: return bt.num2date(self.data.datetime[0]).strftime('%Y-%m-%d') def stop(self): print(f"最终资产: {self.broker.getvalue():.2f}元") self.plot_equity_curve() def plot_equity_curve(self): plt.figure(figsize=(12, 6)) equity = [CONFIG["INITIAL_CAPITAL"]] + self.equity dates = pd.date_range(start=CONFIG["START_DATE"], periods=len(equity), freq='D') mpl_dates = mdates.date2num(dates.to_pydatetime()) plt.plot_date(mpl_dates, equity, fmt="-", label='权益曲线', color='blue') # 使用 plot_date 更安全 # 设置横轴格式 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator()) plt.title('跨式组合策略回测结果') plt.xlabel('时间') plt.ylabel('资产价值 (元)') plt.grid(True) plt.legend() plt.tight_layout() plt.savefig('straddle_strategy.png', dpi=300, bbox_inches='tight') plt.show() # ======= 主程序 ======= if __name__ == '__main__': # 获取ETF数据 print("开始获取ETF数据...") df = fetch_etf_data(CONFIG["ETF_SYMBOL"], CONFIG["START_DATE"], CONFIG["END_DATE"]) # 创建Cerebro引擎 cerebro = bt.Cerebro() cerebro.addstrategy(StraddleStrategy) # 添加数据 data = ETFData(dataname=df) cerebro.adddata(data) # 设置初始资金和手续费 cerebro.broker.setcash(CONFIG["INITIAL_CAPITAL"]) cerebro.broker.setcommission(commission=CONFIG["COMMISSION_RATE"]) cerebro.broker.set_slippage(CONFIG["SLIPPAGE_RATE"]) # 运行回测 print(f'起始资金: {cerebro.broker.getvalue():.2f}') results = cerebro.run() print(f'最终资金: {cerebro.broker.getvalue():.2f}') # 绘图 cerebro.plot(iplot=False)
06-06
USE [jnjhoco_202506] GO /****** Object: View [dbo].[V_BCODE_DETAIL] Script Date: 2025/9/10 11:44:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER VIEW [dbo].[V_BCODE_DETAIL] ( ID, CODE, REF_CODE, REF_TYPE, COMPANY_CODE, COMPANY_FULL_NAME, BUDGET_YEAR, BUDGET_MONTH, CREATOR_USER_NAME, CREATOR_REAL_NAME, PROPOSER_USER_NAME, PROPOSER_REAL_NAME, CREATE_DATE, EXP_LV3, EXP_LV2, EXP_LV1, TP_CODE, TP_NAME, CP_CODE, CP_NAME, PAYER_CODE, PAYER_NAME_CN, VENDOR_CODE, VENDOR_NAME_CN, SOLDTO_CODE, SOLDTO_NAME_CN, IS_CLOSE, BLOCK, IS_NEED_FD, REMARK, CURRENCY_CODE, BC_PLAN, BC_ACT, BC_REV, BC_IN_PP, BC_PP, BC_IN_PC, BC_IN_NPC, BC_IN_REV, DIR_CUS_CODE, CUS_ACCOUNT, BU, LINE_FROM_DATE, LINE_TO_DATE, SHIPMENT_BEGIN_DATE, SHIPMENT_END_DATE, BRAND, APPROVE_DATE, LOCK_ALLOC, LOCK_AUTO, LOCK_FD, LOCK_KC, LOCK_SA, LOCK_DEBATABLE_TP, LOCK_OFFINV, LOCK_NEG, LOCK_DZ, CUS_CODE, CUS_NAME, CUS_NKA_NAME, BC_STATUS, PR_APP_TYPE, PAYLINK_CODE, PAYLINK_NAME, USER_FD_CODE, KC_TYPE, DUG_CODE, HYPER_ACT_CODE, HYPER_ACT_NAME, BC_FROM_DATE, BC_TO_DATE, FD_COST_TYPE, FD_BRANDS, TZ_CODE, ISVALID, MATCH_AMOUNT, MATCH_STATUS, AMOUNT_APPROVE_DATE, TZ_BRAND_CODE, TZ_EXPENSE_TYPE_CODE, TZ_SKU_CODE, TZ_BEGIN_DATE, TZ_END_DATE, SKU_CODE ) AS SELECT –ROW_NUMBER() OVER (ORDER BY CODE) AS ROW_ID, TEMP.ID AS ID, TEMP.CODE, TEMP.REF_CODE, TEMP.REF_TYPE, TEMP.COMPANY_CODE, TEMP.COMPANY_FULL_NAME, TEMP.BUDGET_YEAR, TEMP.BUDGET_MONTH, TEMP.CREATOR_USER_NAME, TEMP.CREATOR_REAL_NAME, TEMP.PROPOSER_USER_NAME, TEMP.PROPOSER_REAL_NAME, TEMP.CREATE_DATE, TEMP.EXP_LV3, TEMP.EXP_LV2, TEMP.EXP_LV1, TEMP.TP_CODE, TEMP.TP_NAME, TEMP.CP_CODE, TEMP.CP_NAME, TEMP.PAYER_CODE, TEMP.PAYER_NAME_CN, TEMP.VENDOR_CODE, TEMP.VENDOR_NAME_CN, TEMP.SOLDTO_CODE, TEMP.SOLDTO_NAME_CN, TEMP.IS_CLOSE, TEMP.BLOCK, TEMP.IS_NEED_FD, TEMP.REMARK, TEMP.CURRENCY_CODE, TEMP.BC_PLAN, TEMP.BC_ACT, TEMP.BC_REV, TEMP.BC_IN_PP, TEMP.BC_PP, TEMP.BC_IN_PC, TEMP.BC_IN_NPC, TEMP.BC_IN_REV, TEMP.DIR_CUS_CODE, TEMP.CUS_ACCOUNT, TEMP.BU, TEMP.LINE_FROM_DATE, TEMP.LINE_TO_DATE, TEMP.SHIPMENT_BEGIN_DATE, TEMP.SHIPMENT_END_DATE, TEMP.BRAND, TEMP.APPROVE_DATE, TEMP.LOCK_ALLOC, TEMP.LOCK_AUTO, TEMP.LOCK_FD, TEMP.LOCK_KC, TEMP.LOCK_SA, TEMP.LOCK_DEBATABLE_TP, TEMP.LOCK_OFFINV, TEMP.LOCK_NEG, TEMP.LOCK_DZ, TEMP.CUS_CODE, TEMP.CUS_NAME, TEMP.CUS_NKA_NAME, (CASE WHEN IS_CLOSE = 1 THEN ‘Closed’ WHEN BLOCK = 1 THEN ‘Locked’ WHEN BC_IN_NPC+BC_IN_PC+BC_IN_PP+BC_IN_REV =0 THEN ‘Open’ ELSE ‘In Process’ END) AS BC_STATUS ,TEMP.PR_APP_TYPE ,TEMP.PAYLINK_CODE ,TEMP.PAYLINK_NAME ,TEMP.USER_FD_CODE ,TEMP.KC_TYPE ,TEMP.DUG_CODE ,TEMP.HYPER_ACT_CODE ,TEMP.HYPER_ACT_NAME ,TEMP.BC_FROM_DATE ,TEMP.BC_TO_DATE ,TEMP.FD_COST_TYPE ,TEMP.FD_BRANDS ,TEMP.TZ_CODE ,TEMP.ISVALID ,TEMP.MATCH_AMOUNT ,(CASE WHEN TEMP.BU not in(select CKEY from T_BI_CHOOSE_OPTION where code=‘PAYMENT_MATCH_CUSTOMER’) THEN ‘无需匹配’ WHEN MATCH_AMOUNT = 0 THEN ‘未匹配’ WHEN BC_PLAN-BC_REV-BC_IN_REV = MATCH_AMOUNT THEN ‘匹配完成’ WHEN MATCH_AMOUNT < BC_PLAN THEN ‘部分匹配’ END) as MATCH_STATUS ,TEMP.AMOUNT_APPROVE_DATE ,TEMP.TZ_BRAND_CODE AS TZ_BRAND_CODE ,TEMP.TZ_EXPENSE_TYPE_CODE AS TZ_EXPENSE_TYPE_CODE ,TEMP.TZ_SKU_CODE AS TZ_SKU_CODE ,TEMP.TZ_BEGIN_DATE AS TZ_BEGIN_DATE ,TEMP.TZ_END_DATE AS TZ_END_DATE ,TEMP.SKU_CODE AS SKU_CODE FROM ( –normal TP bcode, with TP appline SELECT bc.ID, bc.CODE, bc.REF_CODE as REF_CODE, bc.REF_TYPE as REF_TYPE, company.CODE as COMPANY_CODE, company.NAME_FULL as COMPANY_FULL_NAME, bc.BUDGET_YEAR, bc.BUDGET_MONTH, sys.USERNAME as CREATOR_USER_NAME, sys.realName as CREATOR_REAL_NAME, sysu.USERNAME as PROPOSER_USER_NAME, sysu.realName as PROPOSER_REAL_NAME, bc.CREATE_DATE, expLV3.CODE as EXP_LV3, expLV2.CODE as EXP_LV2, expLV1.CODE as EXP_LV1, case when hact.CODE is null then act.CODE else null end as TP_CODE, case when hact.CODE is null then act.NAME else null end as TP_NAME, case when hact.CODE is null then cps.CODE else null end as CP_CODE, case when hact.CODE is null then cps.NAME else null end as CP_NAME, payer.CODE as PAYER_CODE, payer.NAME_CN as PAYER_NAME_CN, vendor.CODE as VENDOR_CODE, vendor.NAME_CN as VENDOR_NAME_CN, soldto.CODE as SOLDTO_CODE, soldto.NAME_CN as SOLDTO_NAME_CN, bc.IS_CLOSE, bc.BLOCK, bc.IS_NEED_FD, bc.REMARK, currency.CODE as CURRENCY_CODE, bc.BC_PLAN, bc.BC_ACT, bc.BC_REV, bc.BC_IN_PP, bc.BC_PP, bc.BC_IN_PC, bc.BC_IN_NPC, bc.BC_IN_REV, cus.SOLDTO_CODE as DIR_CUS_CODE, acc.CODE as CUS_ACCOUNT, cus.BU as BU, line.LINE_BEGIN_DATE as SHIPMENT_BEGIN_DATE, line.LINE_END_DATE as SHIPMENT_END_DATE, line.SHIPMENT_BEGIN_DATE as LINE_FROM_DATE, line.SHIPMENT_END_DATE as LINE_TO_DATE, brandtp.CODE as BRAND, head.APPROVE_DATE, bc.LOCK_ALLOC, bc.LOCK_AUTO, bc.LOCK_FD, bc.LOCK_KC, bc.LOCK_SA, bc.LOCK_DEBATABLE_TP, bc.LOCK_OFFINV, bc.LOCK_NEG, bc.LOCK_DZ, cus.CODE as CUS_CODE, cus.NAME as CUS_NAME, cus.NKA_NAME as CUS_NKA_NAME ,bc.PR_APP_TYPE ,bc.PAYLINK_CODE ,PL.NAME_CN AS PAYLINK_NAME ,bc.USER_FD_CODE ,bc.KC_TYPE ,dug.CODE as DUG_CODE ,hact.CODE as HYPER_ACT_CODE ,hact.NAME as HYPER_ACT_NAME – ,(select MIN(fd.FROM_DATE) from T_TP_FD_BC fdbc left join T_TP_FD fd on fdbc.FD_HEAD_ID=fd.ID where fdbc.BCODE_ID=bc.ID) as BC_FROM_DATE – ,(select MAX(fd.TO_DATE) from T_TP_FD_BC fdbc left join T_TP_FD fd on fdbc.FD_HEAD_ID=fd.ID where fdbc.BCODE_ID=bc.ID) as BC_TO_DATE ,bc.FD_FROM_DATE as BC_FROM_DATE ,bc.FD_TO_DATE as BC_TO_DATE ,bc.FD_COST_TYPE ,bc.FD_BRANDS ,tz.code as TZ_CODE ,tz.isvalid as ISVALID ,bc.MATCH_AMOUNT ,bc.AMOUNT_APPROVE_DATE ,tzBrand.CODE AS TZ_BRAND_CODE ,tzExpenseType.CODE as TZ_EXPENSE_TYPE_CODE ,tzMaterial.CODE as TZ_SKU_CODE ,tz.BEGIN_DATE as TZ_BEGIN_DATE ,TZ.END_DATE AS TZ_END_DATE ,sku.code as SKU_CODE from T_PR_BC as bc left join T_BI_COMPANY as company on bc.COMPANY_ID = company.id left join T_BI_USER as u on bc.CREATOR_ID = u.ID left join SYSUSER as sys on u.SYSUSERID = sys.ID left join T_BI_USER as uu on bc.PROPOSER_ID = uu.ID left join SYSUSER as sysu on uu.SYSUSERID = sysu.ID left join T_BI_EXPENSE_TYPE as expLV3 on bc.COST_TYPE_ID = expLV3.ID left join T_BI_EXPENSE_TYPE as expLV2 on expLV3.P_ID = expLV2.ID left join T_BI_EXPENSE_TYPE as expLV1 on expLV2.P_ID = expLV1.ID left join T_BI_ACTIVITY as act on bc.ACT_ID = act.ID left join T_BI_CPSUBTYPE as cps on bc.CP_SUTYPE_ID = cps.ID left join T_SAP_CUSTOMER_FUCTION as pay on bc.PAYER_ID = pay.ID left join T_SAP_CUSTOMER as payer on pay.CUSTOMER = payer.ID left join T_SAP_VENDOR as vendor on bc.VENDOR_ID = vendor.ID left join T_SAP_CUSTOMER_FUCTION as sold on bc.SOLDTO_ID = sold.ID left join T_SAP_CUSTOMER as soldto on sold.CUSTOMER = soldto.ID left join T_BI_CURRENCY as currency on bc.CUR_ID = currency.ID left join T_TP_APP_LINE as line on bc.REF_ID = line.ID left join T_BI_MATERIAL as sku on bc.SKU_ID = sku.ID left join T_BI_BRAND as brandtp on bc.BRAND_ID = brandtp.ID left join T_TP_APP as head on line.TP_APP_ID = head.ID left join V_BI_CUSTOMER as cus on (cus.CUS_ID=bc.CUS_ID and cus.BUDGET_YEAR=bc.BUDGET_YEAR) left join T_BI_CUSTOMER_ACCOUNT as acc on cus.CUS_ACCOUNT_ID = acc.ID left join T_SAP_CUSTOMER as PL on bc.PAYLINK_CODE=PL.CODE and PL.COCD=‘7049’ and PL.BLOCK=0 left join T_BI_DUG dug on cus.DUG_ID=dug.ID left join T_BI_HYPER_ACTIVITY hact on bc.HYPER_ACT_ID=hact.ID left join T_PR_BC_TZ tz on tz.bcode_id=bc.ID and tz.isValid=1 LEFT JOIN T_BI_EXPENSE_TYPE tzExpenseType ON tzExpenseType.ID =bc.NEW_COST_TYPE_ID LEFT JOIN T_BI_BRAND tzBrand on tzBrand.ID = bc.NEW_BRAND_ID LEFT JOIN T_BI_MATERIAL tzMaterial on tzMaterial.id = bc.NEW_SKU_ID where REF_TYPE=‘TP’ AND KC_TYPE IN(99,3) UNION ALL –kc tp bcode, without tp appline select bc.ID, bc.CODE, bc.REF_CODE as REF_CODE, bc.REF_TYPE as REF_TYPE, company.CODE as COMPANY_CODE, company.NAME_FULL as COMPANY_FULL_NAME, bc.BUDGET_YEAR, bc.BUDGET_MONTH, sys.USERNAME as CREATOR_USER_NAME, sys.realName as CREATOR_REAL_NAME, sysu.USERNAME as PROPOSER_USER_NAME, sysu.realName as PROPOSER_REAL_NAME, bc.CREATE_DATE, expLV3.CODE as EXP_LV3, expLV2.CODE as EXP_LV2, expLV1.CODE as EXP_LV1, case when hact.CODE is null then act.CODE else null end as TP_CODE, case when hact.CODE is null then act.NAME else null end as TP_NAME, case when hact.CODE is null then cps.CODE else null end as CP_CODE, case when hact.CODE is null then cps.NAME else null end as CP_NAME, payer.CODE as PAYER_CODE, payer.NAME_CN as PAYER_NAME_CN, vendor.CODE as VENDOR_CODE, vendor.NAME_CN as VENDOR_NAME_CN, soldto.CODE as SOLDTO_CODE, soldto.NAME_CN as SOLDTO_NAME_CN, bc.IS_CLOSE, bc.BLOCK, bc.IS_NEED_FD, bc.REMARK, currency.CODE as CURRENCY_CODE, bc.BC_PLAN, bc.BC_ACT, bc.BC_REV, bc.BC_IN_PP, bc.BC_PP, bc.BC_IN_PC, bc.BC_IN_NPC, bc.BC_IN_REV, cus.SOLDTO_CODE as DIR_CUS_CODE, acc.CODE as CUS_ACCOUNT, cus.BU as BU, CAST(cast (bc.BUDGET_YEAR as varchar) + ‘-’ + cast(bc.BUDGET_MONTH as varchar) +‘-1’ as date) as LINE_FROM_DATE, dateadd(day,-1,dateadd(Month,1,CAST(cast (bc.BUDGET_YEAR as varchar) + ‘-’ + cast(bc.BUDGET_MONTH as varchar) +‘-1’ as date))) as LINE_TO_DATE, null as SHIPMENT_BEGIN_DATE, null as SHIPMENT_END_DATE, brandtp.CODE as BRAND, bc.CREATE_DATE AS APPROVE_DATE, bc.LOCK_ALLOC, bc.LOCK_AUTO, bc.LOCK_FD, bc.LOCK_KC, bc.LOCK_SA, bc.LOCK_DEBATABLE_TP, bc.LOCK_OFFINV, bc.LOCK_NEG, bc.LOCK_DZ, cus.CODE as CUS_CODE, cus.NAME as CUS_NAME, cus.NKA_NAME as CUS_NKA_NAME ,bc.PR_APP_TYPE ,bc.PAYLINK_CODE ,PL.NAME_CN as PAYLINK_NAME ,bc.USER_FD_CODE ,bc.KC_TYPE ,dug.CODE as DUG_CODE ,hact.CODE as HYPER_ACT_CODE ,hact.NAME as HYPER_ACT_NAME – ,(select MIN(fd.FROM_DATE) from T_TP_FD_BC fdbc left join T_TP_FD fd on fdbc.FD_HEAD_ID=fd.ID where fdbc.BCODE_ID=bc.ID) as BC_FROM_DATE – ,(select MAX(fd.TO_DATE) from T_TP_FD_BC fdbc left join T_TP_FD fd on fdbc.FD_HEAD_ID=fd.ID where fdbc.BCODE_ID=bc.ID) as BC_TO_DATE ,bc.FD_FROM_DATE as BC_FROM_DATE ,bc.FD_TO_DATE as BC_TO_DATE ,bc.FD_COST_TYPE ,bc.FD_BRANDS ,tz.code as TZ_CODE ,tz.isvalid as ISVALID ,bc.MATCH_AMOUNT ,bc.AMOUNT_APPROVE_DATE ,tzBrand.CODE AS TZ_BRAND_CODE ,tzExpenseType.CODE as TZ_EXPENSE_TYPE_CODE ,tzMaterial.CODE as TZ_SKU_CODE ,tz.BEGIN_DATE as TZ_BEGIN_DATE ,TZ.END_DATE AS TZ_END_DATE ,sku.code as SKU_CODE from T_PR_BC as bc left join T_BI_COMPANY as company on bc.COMPANY_ID = company.id left join T_BI_USER as u on bc.CREATOR_ID = u.ID left join SYSUSER as sys on u.SYSUSERID = sys.ID left join T_BI_USER as uu on bc.PROPOSER_ID = uu.ID left join SYSUSER as sysu on uu.SYSUSERID = sysu.ID left join T_BI_EXPENSE_TYPE as expLV3 on bc.COST_TYPE_ID = expLV3.ID left join T_BI_EXPENSE_TYPE as expLV2 on expLV3.P_ID = expLV2.ID left join T_BI_EXPENSE_TYPE as expLV1 on expLV2.P_ID = expLV1.ID left join T_BI_ACTIVITY as act on bc.ACT_ID = act.ID left join T_BI_CPSUBTYPE as cps on bc.CP_SUTYPE_ID = cps.ID left join T_SAP_CUSTOMER_FUCTION as pay on bc.PAYER_ID = pay.ID left join T_SAP_CUSTOMER as payer on pay.CUSTOMER = payer.ID left join T_SAP_VENDOR as vendor on bc.VENDOR_ID = vendor.ID left join T_SAP_CUSTOMER_FUCTION as sold on bc.SOLDTO_ID = sold.ID left join T_SAP_CUSTOMER as soldto on sold.CUSTOMER = soldto.ID left join T_BI_CURRENCY as currency on bc.CUR_ID = currency.ID left join T_BI_MATERIAL as sku on bc.SKU_ID = sku.ID left join T_BI_BRAND as brandtp on bc.BRAND_ID = brandtp.ID left join V_BI_CUSTOMER as cus on (cus.CUS_ID=bc.CUS_ID and cus.BUDGET_YEAR=bc.BUDGET_YEAR) left join T_BI_CUSTOMER_ACCOUNT as acc on cus.CUS_ACCOUNT_ID = acc.ID left join T_SAP_CUSTOMER as PL on bc.PAYLINK_CODE=PL.CODE and PL.COCD=‘7049’ and PL.BLOCK=0 left join T_BI_DUG dug on cus.DUG_ID=dug.ID left join T_BI_HYPER_ACTIVITY hact on bc.HYPER_ACT_ID=hact.ID left join T_PR_BC_TZ tz on tz.bcode_id=bc.ID and tz.isValid=1 LEFT JOIN T_BI_EXPENSE_TYPE tzExpenseType ON tzExpenseType.ID =bc.NEW_COST_TYPE_ID LEFT JOIN T_BI_BRAND tzBrand on tzBrand.ID = bc.NEW_BRAND_ID LEFT JOIN T_BI_MATERIAL tzMaterial on tzMaterial.id = bc.NEW_SKU_ID where REF_TYPE=‘TP’ AND KC_TYPE not in(99,3) UNION ALL –none TP bcode select bc.ID, bc.CODE, bc.REF_CODE as REF_CODE, bc.REF_TYPE as REF_TYPE, company.CODE as COMPANY_CODE, company.NAME_FULL as COMPANY_FULL_NAME, bc.BUDGET_YEAR, bc.BUDGET_MONTH, sys.USERNAME as CREATOR_USER_NAME, sys.realName as CREATOR_REAL_NAME, sysu.USERNAME as PROPOSER_USER_NAME, sysu.realName as PROPOSER_REAL_NAME, bc.CREATE_DATE, expLV3.CODE as EXP_LV3, expLV2.CODE as EXP_LV2, expLV1.CODE as EXP_LV1, null as TP_CODE, null as TP_NAME, case when hact.code is null then cps.CODE else null end as CP_CODE, case when hact.code is null then cps.NAME else null end as CP_NAME, payer.CODE as PAYER_CODE, payer.NAME_CN as PAYER_NAME_CN, vendor.CODE as VENDOR_CODE, vendor.NAME_CN as VENDOR_NAME_CN, soldto.CODE as SOLDTO_CODE, soldto.NAME_CN as SOLDTO_NAME_CN, bc.IS_CLOSE, bc.BLOCK, bc.IS_NEED_FD, bc.REMARK, currency.CODE as CURRENCY_CODE, bc.BC_PLAN, bc.BC_ACT, bc.BC_REV, bc.BC_IN_PP, bc.BC_PP, bc.BC_IN_PC, bc.BC_IN_NPC, bc.BC_IN_REV, null as DIR_CUS_CODE, null as CUS_ACCOUNT, null as BU, line.FROM_DATE as LINE_FROM_DATE, line.TO_DATE as LINE_TO_DATE, null as SHIPMENT_BEGIN_DATE, null as SHIPMENT_END_DATE, brandcp.CODE as BRAND, head.APPROVE_DATE, bc.LOCK_ALLOC, bc.LOCK_AUTO, bc.LOCK_FD, bc.LOCK_KC, bc.LOCK_SA, bc.LOCK_DEBATABLE_TP, bc.LOCK_OFFINV, bc.LOCK_NEG, bc.LOCK_DZ, null AS CUS_CODE, null AS CUS_NAME, null AS CUS_NKA_NAME ,bc.PR_APP_TYPE ,null as PAY_LINK_CODE ,NULL AS PAY_LINK_NAME ,bc.USER_FD_CODE ,bc.KC_TYPE ,null as DUG_CODE ,hact.CODE as HYPER_ACT_CODE ,hact.NAME as HYPER_ACT_NAME ,null ,null ,null ,null ,tz.code as TZ_CODE ,tz.isvalid as ISVALID ,bc.MATCH_AMOUNT ,bc.AMOUNT_APPROVE_DATE ,tzBrand.CODE AS TZ_BRAND_CODE ,tzExpenseType.CODE as TZ_EXPENSE_TYPE_CODE ,tzMaterial.CODE as TZ_SKU_CODE ,tz.BEGIN_DATE as TZ_BEGIN_DATE ,TZ.END_DATE AS TZ_END_DATE ,sku.code as SKU_CODE from T_PR_BC as bc left join T_BI_COMPANY as company on bc.COMPANY_ID = company.id left join T_BI_USER as u on bc.CREATOR_ID = u.ID left join SYSUSER as sys on u.SYSUSERID = sys.ID left join T_BI_USER as uu on bc.PROPOSER_ID = uu.ID left join SYSUSER as sysu on uu.SYSUSERID = sysu.ID left join T_BI_EXPENSE_TYPE as expLV3 on bc.COST_TYPE_ID = expLV3.ID left join T_BI_EXPENSE_TYPE as expLV2 on expLV3.P_ID = expLV2.ID left join T_BI_EXPENSE_TYPE as expLV1 on expLV2.P_ID = expLV1.ID left join T_BI_CPSUBTYPE as cps on bc.CP_SUTYPE_ID = cps.ID left join T_SAP_CUSTOMER_FUCTION as pay on bc.PAYER_ID = pay.ID left join T_SAP_CUSTOMER as payer on pay.CUSTOMER = payer.ID left join T_SAP_VENDOR as vendor on bc.VENDOR_ID = vendor.ID left join T_SAP_CUSTOMER_FUCTION as sold on bc.SOLDTO_ID = sold.ID left join T_SAP_CUSTOMER as soldto on sold.CUSTOMER = soldto.ID left join T_BI_CURRENCY as currency on bc.CUR_ID = currency.ID left join T_AP_APP_LINE as line on bc.REF_ID = line.ID left join T_AP_APP as head on line.APP_ID = head.ID left join T_BI_BRAND as brandcp on head.BRAND_ID = brandcp.ID left join T_BI_HYPER_ACTIVITY hact on bc.HYPER_ACT_ID=hact.ID left join T_PR_BC_TZ tz on tz.bcode_id=bc.ID and tz.isValid=1 LEFT JOIN T_BI_EXPENSE_TYPE tzExpenseType ON tzExpenseType.ID =bc.NEW_COST_TYPE_ID LEFT JOIN T_BI_BRAND tzBrand on tzBrand.ID = bc.NEW_BRAND_ID LEFT JOIN T_BI_MATERIAL tzMaterial on tzMaterial.id = bc.NEW_SKU_ID left join T_BI_MATERIAL as sku on bc.SKU_ID = sku.ID where REF_TYPE not in(‘TP’) )TEMP GO 这是我这个sql server 视图的内容,现在我的需求是 tz_code如果有多个需要 使用 英文逗号 拼成一行例如BCTZ01,BCTZ02,BCTZ03 ,你能直接帮我改好一个完整的视图,我只需要复制粘贴就行
最新发布
09-11
# 设置起始日期和结束日期 start_date = datetime.date(2022,1, 1) end_date = datetime.date(2024, 12, 30) # 循环遍历每五天 current_date = start_date while current_date <= end_date: # 输出当前处理的日期 print(f"Processing Year: {current_date.year}, Month: {current_date.month}, Day: {current_date.day}") # 计算起始和结束日期 target_date = current_date start_date_range = target_date - datetime.timedelta(days=15) # 起始日期是目标日期前五天 end_date_range = target_date + datetime.timedelta(days=15) # 终止日期是目标日期后五天 # 提取起始和终止日期的年月日 start_year_range = start_date_range.year start_month_range = start_date_range.month start_day_range = start_date_range.day end_year_range = end_date_range.year end_month_range = end_date_range.month end_day_range = end_date_range.day # 生成特定日期范围内的无云影像 imgS2 = imgS2Cloudless(roi, start_year_range, start_month_range, start_day_range, end_year_range, end_month_range, end_day_range, S2_BANDS, 'mean', 85) Map.addLayer(imgS2, {'bands': ['B4','B3','B2'], 'min':0, 'max':0.3}, '去云后影像') if imgS2 is not None: # 应用水体检测模型 imgArray = imgS2.select(S2_BANDS).toArray().toArray(1) t = fc1_w_gee.matrixMultiply(imgArray).add(fc1_b_gee) t = t.gt(0).multiply(t) t = fc2_w_gee.matrixMultiply(t).add(fc2_b_gee) t = t.gt(0).multiply(t) t = fc3_w_gee.matrixMultiply(t).add(fc3_b_gee) t = t.arrayGet([0, 0]).clip(roi) # 转换为最终的水体概率图像 water = ee.Image(1).divide(t.multiply(-1).exp().add(ee.Image(1))).clip(roi) Map.addLayer(water.gt(0.5).selfMask(),{'palette':'red'},'water') water_mask = water.gt(0.5).selfMask() # 导出影像 geemap.ee_export_image_to_drive( image=water_mask, description=f"WaterMap_{current_date.year}_{current_date.month}_{current_date.day}", folder="GEE2_Exports", scale=30, region=roi.geometry(), ) print(f"Exported: WaterMap_{current_date.year}_{current_date.month}_{current_date.day} to Google Drive") # 增加五天 current_date += datetime.timedelta(days=15)
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值