扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
用正则表达式选择出来,然后用函数str_to_date来转换
创新互联公司专注于龙文网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供龙文营销型网站建设,龙文网站制作、龙文网页设计、龙文网站官网定制、小程序开发服务,打造龙文网络公司原创品牌,更为您提供龙文网站排名全网营销落地服务。
update table_name set release_date = STR_TO_DATE(REPLACE(release_date,' ',''),'%d %M %Y @') where release_date REGEXP'^[0-9]{1,2}.*[July|Janurary|February|May|June|July|August|September|October|November|December|March].*@.*[0-9]$';
其他的类似哦
从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用“管道输出”的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过“中间件”的方式使两者在进行数据操作时达到最佳速度。
一个约八百万行数据的mysql表,原本导入到redis中需要90分钟,使用这个方法后,只需要两分钟。不管你信不信,反正我是信了。
Mysql到Redis的数据协议
redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。这第一步就是把Mysql查询的内容格式化成redis-cli可用的数据格式。here we go!
我的统计表:
?1234567 CREATE TABLE events_all_time ( id int(11) unsigned NOT NULL AUTO_INCREMENT, action varchar(255) NOT NULL, count int(11) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uniq_action (action) );准备在每行数据中执行的redis命令如下:
HSET events_all_time [action] [count]
按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:
-- events_to_redis.sql
?12345678910111213141516171819 SELECT CONCAT( "*4\r\n", '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n', '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n', '$', LENGTH(hkey), '\r\n', hkey, '\r\n', '$', LENGTH(hval), '\r\n', hval, '\r') FROM ( SELECT 'HSET' as redis_cmd, 'events_all_time' AS redis_key, action AS hkey, count AS hval FROM events_all_time ) AS tok, 用下面的命令执行:
?1 mysql stats_db --skip-column-names --raw events_to_redis.sql | redis-cli --pipe很重要的mysql参数说明:
1.--raw: 使mysql不转换字段值中的换行符。
2.--skip-column-names: 使mysql输出的每行中不包含列名。
方法/步骤
首先,在创建的数据库中新建一张数据库表t_amount_info,设置好字段名以及数据类型
如下图所示:
在点击“Apply”后,出现了SQL 语句错误
如下图所示:
查看MySQL Workbench日志可知,在设置id主键默认值时,出现错误
id INT NOT NULL DEFAULT ID
这里id是int数据类型,但是默认值给的是varchar,所以报错
修改完后,再次执行
如下图所示:
然后,再向该数据库表里插入数据
如下图所示:
点击“Apply”运行后,发现出现错误
如下图所示:
由报错日志可知,id是数据库表的主键,但是在插入的过程未给值,导致报错,修改后
如下图所示:
接着,查询t_amount_info表并格式化amount字段结果
如下图所示:
8
结果发现,出现错误,由报错日志可知
STR_TO_DATE(字符串,日期格式)
如下图所示:
如何在MySQL中把一个字符串转换成日期,分为以下两种情况:
无需转化的
SELECT * FROM 表名 WHERE date_sy'2016-12-01' AND date_sy'2016-12-05'
使用DATE_FORMAT
SELECT * FROM 表名 WHERE DATE_FORMAT( date_sy, '%Y-%m-%d')'2016-12-01' AND DATE_FORMAT( date_sy, '%Y-%m-%d')'2016-12-05'
方法一:实体类中加日期格式化注解
[java] view plaincopy
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date receiveAppTime;
如上,在对应的属性上,加上指定日期格式的注解,本人亲自测试过,轻松解决问题!
需要 import org.springframework.format.annotation.DateTimeFormat;
转换函数位于spring-context.jar包中
方法二:控制器Action中加入一段数据绑定代码
[java] view plaincopy
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); //true:允许输入空值,false:不能为空值
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流