簡體   English   中英

我的 SQL - 獲取特定搜索的值,然后添加並最后放入同一張表的另一列

[英]My SQL - getting values for specific search and then adding and finally putting in another column of same table

我想添加執行某個查詢后獲得的某個搜索的值,最后將它們分別放在同一個表的不同列中。

select TotalAmount from Payment_Data where CreatedAt like "%04-07%", 插入 VendorPIAmount;

就像我在執行頂級查詢后得到了值,但我不知道如何添加它們,最后將它們放在另一列中。

借助一些現有的庫,並且很容易實現這個function,但是如果你的數據量比較大,fastexcel是apache poi的一個很好的替代品。參考: Z5E056C500A1C4B6A7110A1C4B6A7110A1C4B6A710A1C4B6A7110.com另外/dtimexcel。 , hutool 是一個很棒的工具集合,可以很方便的操作數據庫。 它還有很多其他常用功能,日期格式轉換,字符串處理等。參考: https://github.com/dromara/hutool

package com.example.demo;

import cn.hutool.core.io.FileUtil;
import cn.hutool.db.DbUtil;
import cn.hutool.db.ds.simple.SimpleDataSource;
import org.dhatim.fastexcel.Color;
import org.dhatim.fastexcel.Workbook;
import org.dhatim.fastexcel.Worksheet;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.OutputStream;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

public class DataExportTest {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * export data to excel
     */
    @Test
    public void Test2() {
        LocalDateTime start = LocalDateTime.now();
        try (OutputStream os = FileUtil.getOutputStream("D:\\tmp\\TEST_DATA_2_EXCEL.xlsx")) {
            SimpleDataSource ds = new SimpleDataSource("jdbc:mariadb://localhost:3306/litemall", "root", "rooter", "org.mariadb.jdbc.Driver");
            List<String> list = DbUtil.use(ds).query("SELECT TotalAmount  from Payment_Data where CreatedAt like ?", String.class, "%04-07%");
            Workbook wb = new Workbook(os, "MyApplication", "1.0");
            Worksheet ws = wb.newWorksheet("Sheet 1");
            ws.value(0, 0, "VendorPIAmount");
            ws.style(0, 0).fillColor(Color.GRAY2).set();
            for (int i = 0; i < list.size(); i++) {
                ws.value(i + 1, 0, list.get(i));
            }
            wb.finish();
        } catch (Exception e) {
            logger.error("Error", e);
        }
        LocalDateTime end = LocalDateTime.now();
        logger.info("Cost time {}", Duration.between(start, end).toMillis() + "ms");
    }
}

依賴性:

<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.7.4</version>
</dependency>
<dependency>
    <groupId>org.dhatim</groupId>
    <artifactId>fastexcel-reader</artifactId>
    <version>0.12.12</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.16</version>
</dependency>

代碼中使用的表是根據您的描述在本地 mariadb 數據庫中創建的。 DDL 如下。

-- ----------------------------
-- Table structure for payment_data
-- ----------------------------
DROP TABLE IF EXISTS `payment_data`;
CREATE TABLE `payment_data`  (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CreatedAt` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `TotalAmount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of payment_data
-- ----------------------------
INSERT INTO `payment_data` VALUES (1, 'DCBA01-17ABCD', 'AAA');
INSERT INTO `payment_data` VALUES (2, 'DEDCB02-32BCDE', 'BBB');
INSERT INTO `payment_data` VALUES (3, 'ASDF04-07FDSA', 'CCC');
INSERT INTO `payment_data` VALUES (4, 'ZXCV04-07VCXZ', 'DDD');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM