mysql - 基于时间戳更新列的任何快速方法
问题描述
我有一个数据库表,其列存储时间戳的格式如下 01-SEP-2020 我在同一个表中添加了一个新列 BHAV_ID,具有整数数据类型,现在为空白
现在,我正在尝试根据时间戳值更新列 BHAV_ID 例如,附件是屏幕截图
2018 年 1 月 19 日相当于 2180119(YYYYMMDD) 更新为该列中的整数数据类型
从 java 代码的角度来看,我正在使用一种肮脏的技术,我一次读取一行并计算和更新 BHAV_ID 列中的值。但它会花费很多时间。要更新 780 条记录,需要将近 40 分钟才能完成。
表中有 20,000,000 条记录。如果我使用 Coding 方法,那么它会一起持续数周,所以我正在寻找数据库查询级别的任何帮助。
解决方案
假设所有TIME_STAMP
值都与示例“DD-MMM-YYYY”中的格式一致,并且月份根据 MySQL 中的标准缩写,您可以使用STR_TO_DATE然后选择使用DATE_FORMAT生成您想要的格式或简单地删除-
使用REPLACE的连字符 ( ) 。
/*USING DATE_FORMAT + STR_TO_DATE*/
SELECT BHAV_ID, DATE_FORMAT(STR_TO_DATE(TIME_STAMP, '%d-%b-%Y'),'%Y%m%d')
FROM TABLE_A;
/*USING REPLACE + STR_TO_DATE*/
SELECT BHAV_ID, REPLACE(STR_TO_DATE(TIME_STAMP, '%d-%b-%Y'),'-','')
FROM TABLE_A;
上面的两个查询都可以将TIME_STAMP
您拥有的当前格式转换为您想要的所需格式。将其中任何一个转换为UPDATE
类似的语法(以第一个示例为例):
UPDATE TABLE_A
SET BHAV_ID = DATE_FORMAT(STR_TO_DATE(TIME_STAMP, '%d-%b-%Y'),'%Y%m%d')
WHERE BHAV_ID IS NULL;
您可以在此处查看演示小提琴以及 MySQL 中提取的月份缩写名称列表。
推荐阅读
- javascript - 为什么 Firebase 命令不起作用?
- linux - MacOS 中的 Bash 脚本与 LInux 有何不同?
- php - Laravel 调用未定义的方法 App\\Model ::mapInto(), vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php
- c++ - MSVC 是否支持 C++11 样式的属性而不是 __declspec?
- python - for 关键字是否理解字符串是迭代?
- flutter - 如何在 post 方法中包含对象?HTTP
- android - Android如何创建梯形形状
- java - 在 Java 运算符方面需要一些帮助,得到“一元运算符的错误操作数类型 int”错误
- python - 带有池和上下文管理器的 Python 多处理
- python - 如何使用 python 从分组数据框中插入图表名称作为变量?