column的high_value low_value

本文介绍了一种查询数据库中RAW类型字段的最小值和最大值的方法,并提供了一个自定义函数来展示这些值的原始形式。

可以通过 XX_TAB_COL ,TAB_COL_STATISTICS查询字段的low_value,high_value。该字段为RAW类型。
    
计算方式为在最小值基础上取DUMP,转换为16进制,取前32位数据,然后将逗号替换为0。
参考脚本如下:

点击(此处)折叠或打开

  1. select trim(upper(replace(substr(dump(min(C_ID), 16, 0, 32),
  2.                                    instr(dump(min(C_ID), 16, 0, 32), ':', 1) + 1),
  3.                             ',',
  4.                             '0'))) low_value,
  5.          trim(upper(replace(substr(dump(max(c_id), 16, 0, 32),
  6.                                    instr(dump(max(C_ID), 16, 0, 32), ':', 1) + 1),
  7.                             ',',
  8.                             '0'))) high_value
  9.     from temp_0830;

用如下自定义函数可以查看low_value,high_value的原始值

点击(此处)折叠或打开

  1. create or replace function display_raw (rawval raw, type varchar2)
  2. return varchar2
  3. is
  4.    cn number;
  5.    cv varchar2(32);
  6.    cd date;
  7.    cnv nvarchar2(32);
  8.    cr rowid;
  9.    cc char(32);
  10. begin
  11.    if (type = 'NUMBER') then
  12.       dbms_stats.convert_raw_value(rawval, cn);
  13.       return to_char(cn);
  14.    elsif (type = 'VARCHAR2') then
  15.       dbms_stats.convert_raw_value(rawval, cv);
  16.       return to_char(cv);
  17.    elsif (type = 'DATE') then
  18.       dbms_stats.convert_raw_value(rawval, cd);
  19.       return to_char(cd);
  20.    elsif (type = 'NVARCHAR2') then
  21.       dbms_stats.convert_raw_value(rawval, cnv);
  22.       return to_char(cnv);
  23.    elsif (type = 'ROWID') then
  24.       dbms_stats.convert_raw_value(rawval, cr);
  25.       return to_char(cnv);
  26.    elsif (type = 'CHAR') then
  27.       dbms_stats.convert_raw_value(rawval, cc);
  28.       return to_char(cc);
  29.    else
  30.       return 'UNKNOWN DATATYPE';
  31.    end if;
  32. end;

  33. select
  34.    a.column_name,
  35.    display_raw(a.low_value,b.data_type) as low_val,
  36.    display_raw(a.high_value,b.data_type) as high_val,
  37.    b.data_type
  38. from
  39.    user_tab_col_statistics a, user_tab_cols b
  40. where
  41.    a.table_name='table_name' and
  42.    a.table_name=b.table_name and
  43.    a.column_name=b.column_name


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

转载于:http://blog.itpub.net/28963243/viewspace-2124182/

import openpyxl from openpyxl.utils import column_index_from_string import random import os # ================== 主配置 ================== filename = "IO.xlsx" sheet_name = "TB2820" # ========== 参数列表输入格式 ========== # 格式: [列字母, 起始行, 结束行, 基准, 偏移量, 是否启用偏移(1=是, 0=否), 小数位数] input_params = [ # 列 开始行 结束行 偏移 启用? 小数位 ['T', 11, 70, 50, 0.0, 0, 4], ['U', 11, 70, 1, 0.0, 0, 4], ['V', 11, 70, 30, 0.0, 0, 4], ['W', 11, 70, 100, 0.0, 0, 4], ] # ========== 不需要修改以下代码 ========== def is_in_merged_range(ws, row, col): """检查是否在合并单元格中,并判断是否为左上角""" for merged in ws.merged_cells.ranges: min_col, min_row, max_col, max_row = openpyxl.utils.range_boundaries(str(merged)) if min_row <= row <= max_row and min_col <= col <= max_col: return True, (row == min_row and col == min_col) return False, False # 加载文件并填充 if not os.path.exists(filename): print(f"错误:文件 '{filename}' 不存在。") else: try: wb = openpyxl.load_workbook(filename) except Exception as e: print(f"无法打开文件,请关闭Excel。错误: {e}") else: if sheet_name not in wb.sheetnames: print(f"错误:工作表 '{sheet_name}' 不存在。") else: ws = wb[sheet_name] success_count = 0 for param in input_params: col_letter, start_row, end_row, fixed_value, offset, use_offset, decimals = param try: col_idx = column_index_from_string(col_letter) except ValueError: print(f"无效列名: {col_letter},跳过。") continue # === 新增:检查起始单元格的是否为 "NA" === first_cell = ws.cell(row=start_row, column=col_idx) # 获取实际(考虑合并单元格也可能导致空) cell_value = first_cell.value # 判断是否为字符串类的 "NA"、"na"、"Na" 等 if isinstance(cell_value, str) and cell_value.strip().upper() == "NA": print(f"⚠️ 跳过列 '{col_letter}':起始单元格 ({start_row}) 的为 NA。") continue # 跳过整列 filled = False for row in range(start_row, end_row + 1): cell = ws.cell(row=row, column=col_idx) is_merged, is_top_left = is_in_merged_range(ws, row, col_idx) if not is_merged or is_top_left: if use_offset and isinstance(fixed_value, (int, float)) and offset > 0: low = fixed_value - offset high = fixed_value + offset value = fixed_value attempts = 0 while attempts < 100: value = round(random.uniform(low, high), decimals) if value != fixed_value: break attempts += 1 else: # 备选方案:微调避开原 value = round(fixed_value + offset * 0.1, decimals) else: if isinstance(fixed_value, float): value = round(fixed_value, decimals) else: value = fixed_value cell.value = value filled = True if filled: success_count += 1 # 保存文件 try: wb.save(filename) print(f"成功:已向 {success_count} 列写入数据。") except PermissionError: print("保存失败:文件被占用,请关闭Excel后重试。") ['W', 11, 70, 100, 0.0, 0, 4], 第四个变量可以直接传文字吗
11-21
给这个keypad写个示例使用文件,任意按键按下时执行RGB_RED(10); 驱动文件内容为:// keypad.c #include "main.h" #include "gpio.h" #include "keypad.h" static const uint8_t KEYPAD_Buttons[4][4] = { {0x01, 0x02, 0x03, 0x0C}, {0x04, 0x05, 0x06, 0x0D}, {0x07, 0x08, 0x09, 0x0E}, {0x0A, 0x00, 0x0B, 0x0F}, }; void KEYPAD_Init(void) { /* GPIO初始化已经在MX_GPIO_Init中完成 */ /* 设置所有行初始为高电平 */ KEYPAD_ROW_1_HIGH(); KEYPAD_ROW_2_HIGH(); KEYPAD_ROW_3_HIGH(); KEYPAD_ROW_4_HIGH(); } static void PullDownRow(uint8_t row) { switch(row) { case 1: KEYPAD_ROW_1_LOW(); KEYPAD_ROW_2_HIGH(); KEYPAD_ROW_3_HIGH(); KEYPAD_ROW_4_HIGH(); break; case 2: KEYPAD_ROW_1_HIGH(); KEYPAD_ROW_2_LOW(); KEYPAD_ROW_3_HIGH(); KEYPAD_ROW_4_HIGH(); break; case 3: KEYPAD_ROW_1_HIGH(); KEYPAD_ROW_2_HIGH(); KEYPAD_ROW_3_LOW(); KEYPAD_ROW_4_HIGH(); break; case 4: KEYPAD_ROW_1_HIGH(); KEYPAD_ROW_2_HIGH(); KEYPAD_ROW_3_HIGH(); KEYPAD_ROW_4_LOW(); break; default: break; } } static uint8_t CheckColumn(uint8_t row) { if(KEYPAD_COLUMN_1_CHECK()) { KEYPAD_Debounce_Delay(KEYPAD_DEBOUNCE_DELAYTIME); if(KEYPAD_COLUMN_1_CHECK()) return KEYPAD_Buttons[row-1][0]; } if(KEYPAD_COLUMN_2_CHECK()) { KEYPAD_Debounce_Delay(KEYPAD_DEBOUNCE_DELAYTIME); if(KEYPAD_COLUMN_2_CHECK()) return KEYPAD_Buttons[row-1][1]; } if(KEYPAD_COLUMN_3_CHECK()) { KEYPAD_Debounce_Delay(KEYPAD_DEBOUNCE_DELAYTIME); if(KEYPAD_COLUMN_3_CHECK()) return KEYPAD_Buttons[row-1][2]; } if(KEYPAD_COLUMN_4_CHECK()) { KEYPAD_Debounce_Delay(KEYPAD_DEBOUNCE_DELAYTIME); if(KEYPAD_COLUMN_4_CHECK()) return KEYPAD_Buttons[row-1][3]; } return KEYPAD_NO_PRESSED; } uint8_t KEYPAD_Read(void) { for(uint8_t row = 1; row <= 4; row++) { PullDownRow(row); uint8_t result = Check
03-26
基于以下代码修改,在'Diffs_location'sheet单元格中,过长的数据自动换行({'High/Low': 'Low', 'BLOCK': 1, 'WL': 0, 'BL': 0, 'IO': 1}, {'High/Low': 'Low', 'BLOCK': 0, 'WL': 0, 'BL': 0, 'IO': 0}, {'High/Low': 'Low', 'BLOCK': 1, 'WL': 0, 'BL': 0, 'IO': 1}, {'High/Low': 'Low', 'BLOCK': 1, 'WL': 0, 'BL': 0, 'IO': 1}, {'High/Low': 'Low', 'BLOCK': 1, 'WL': 0, 'BL': 0, 'IO': 1}这种格式,将每个大括号中的内容放为一行),且将两个sheet中的单元格都根据单元格内容自动调整为合适的宽度。 output_path = r"C:\Users\x00708\PycharmProjects\mission\practice_from_work_data\CP\partial_test_times_result.xlsx" with pd.ExcelWriter(output_path) as writer: # Sheet1: SiteID和差异信息 pd.DataFrame(sheet1_data).to_excel( writer, sheet_name='Diffs_location', index=False ) # Sheet2: 电压位置和统计信息 pd.DataFrame(sheet2_data).to_excel( writer, sheet_name='Ratio_data', index=False ) wb = load_workbook(output_path) # 从工作簿中获取名为'diffs_location'的sheet对象,赋值给ws_loc ws_loc = wb['Diffs_location'] ws_ratio = wb['Ratio_data'] # 给ratio_data的表头设置背景色 header_fill = PatternFill(start_color="E6E6FA", fill_type="solid") for ws in [ws_loc[1], ws_ratio[1]]: for cell in ws: # 第一行是表头 cell.fill = header_fill # 调整ratio_data的列宽 for col in ws_ratio.iter_cols(min_row=1, max_row=ws_ratio.max_row, max_col=ws_ratio.max_column): max_length = 0 column_letter = col[0].column_letter for cell in col: if cell.value is not None: cell_value = str(cell.value) if len(cell_value) > max_length: max_length = len(cell_value) adjusted_width = max_length + 1 ws_ratio.column_dimensions[column_letter].width = adjusted_width # 保存调整后的工作簿 wb.save(output_path)
11-05
2025-03-24 20:39:40,980 INFO org.apache.spark.deploy.yarn.ApplicationMaster - Final app status: FAILED, exitCode: 15, (reason: User class threw exception: org.apache.spark.sql.AnalysisException: USING column `left` cannot be resolved on the left side of the join. The left-side columns: [COLLECT_ID, MP_ID, CITY_ORG_ID, CITY_ORG_NAME, MAINTAINER_ID, MAINTAINER_NAME, MAINTCREW_ID, MAINTCREW_NAME, ORG_NO, ORG_NAME, CUST_ID, CUST_NO, CUST_NAME, TRANSFORMER_ID, TRANSFORMER_NAME, CUST_MP_LEVEL_NAME, CUST_VOLTAGE_LEVEL_NAME, MP_VOLTAGE_LEVEL_NAME, CUST_MP_LEVEL_CODE, CUST_VOLTAGE_LEVEL_CODE, MP_VOLTAGE_LEVEL, LINE_ID, LINE_NAME, UPPER_RATE, LOWER_RATE, UPPER_TL, LOWER_TL, QUALIFIED_TL, TOTAL_TL, QUALIFIED_RATE, MAX_VOLTAGE, MAX_VOLTAGE_TIME, MIN_VOLTAGE, MIN_VOLTAGE_TIME, PROVINCE_NAME, PROVINCE_ID, WIRING_MODE, MEAS_MODE, STATION_ID, STATION_NAME, AVG_VOLTAGE, RANGE_QUALIFIED_RATE, RANGE_UPPER_RATE, RANGE_LOWER_RATE, RANGE_UPPER_HIGH_RATE, RANGE_LOWER_LOW_RATE, RANGE_UPPER_HIGHER_RATE, RANGE_LOWER_DOWN_RATE, CRITICAL_LOWER_RATE, RANGE_UPPER_TL_A, RANGE_LOWER_TL_A, RANGE_UPPER_HIGH_TL_A, RANGE_LOWER_LOW_TL_A, RANGE_UPPER_HIGHER_TL_A, RANGE_LOWER_DOWN_TL_A, CRITICAL_LOWER_TIME, RANGE_QUALIFIED_TL, UPPER_TIME, UPPER_TIME_HUG, LOWER_TIME, LOWER_TIME_HUG, UPPER_TIME1, UPPER_TIME2, WAVE_ORDINARY_TIME, WAVE_TIME, IS_UPPER_OVER, IS_UPPER_OVER_HUG, IS_LOWER_OVER, IS_LOWER_OVER_HUG, UPPER_CUST_NUM1, UPPER_CUST_NUM2, IS_WAVE, IS_ORDINARY_WAVE, IS_CRITICAL_LOWER_OVER, IS_RANGE_LOWER_DOWN_A, IS_RANGE_LOWER_LOW_A, IS_RANGE_LOWER_A, IS_RANGE_UPPER_A, IS_RANGE_UPPER_HIGH_A, IS_RANGE_UPPER_HIGHER_A, UPPER_TIME_INDEX, UPPER_TIME_INDEX_HUG, LOWER_TIME_INDEX, LOWER_TIME_INDEX_HUG, INDEX, FC_GC_FLAG, TG_NO, TRADE_CODE, TRADE_NAME, ELEC_TYPE_CODE, IS_DUAL_POWER, CUST_PRIO_CODE, IMPORTANT_TYOE_NAME, INSTALLED_CAPACITY, CONTRACT_CAP, FREQUENCY_TYPE, ABNORMAL_PT_VALUE, PT_VALUE, IS_IMPORT_CUST, IS_FOCUS_CUST, IS_COMPLAINT_CUST, IS_REPORT_CUST, IS_PROJECT_CUST, IS_PROTECTION_CUST, IS
03-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值