我想从另一个表的字段更新日期字段,如下所示:
UPDATE table1
left join table2 on table1.key = table2.key
set table1.old_date = STR_TO_DATE(table2.string_date,'%Y%m%d %T');
SELECT table1.old_date, table2.string_date, STR_TO_DATE(string_date,'%Y%m%d')) as "new_dob"
left join table2 on table1.key = table2.key
我的old_date是一个日期时间字段,我的string_date是格式为'YYYYMMDD'的字符串日期 当我选择时,我的日期格式很好,但是当我尝试更新它时失败并出现错误:
Data Truncation error occurred on a write of column 0Data was 0 bytes long and 0 bytes were transferred.
我认为这是一个日期格式问题,但我找不到真正的解决方案(我尝试了几个)基于此社区的错误。
由于
编辑: 我在这里添加一些关于我的db的信息:
ColumnIndex getColumnName getColumnTypeName getPrecision getScale isNullable getTableName getSchemaName getCatalogName getColumnClassName getColumnDisplaySize getColumnLabel getColumnType isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isReadOnly isSearchable isSigned isWritable
1 string_date VARCHAR 8 0 1 dump_external_customer my_db java.lang.String 8 string_date 12 false false false true false true false true
2 old_date DATETIME 19 0 0 customer my_db java.sql.Timestamp 19 old_date 93 false false false true false true false true
19750921
1970-08-17 00:00:00
我的转换日期 1975年9月21日
答案 0 :(得分:0)
如果格式为“YYYYMMDD”,则没有时间组件。所以不要在str_to_date()
中找到它:
UPDATE table1 left join
table2
on table1.key = table2.key
set table1.old_date = STR_TO_DATE(table2.string_date, '%Y%m%d');
当然,MySQL确实将该格式识别为日期,因此您也可以使用date()
:
UPDATE table1 left join
table2
on table1.key = table2.key
set table1.old_date = DATE(table2.string_date);
答案 1 :(得分:0)
更新table1 在table1.key = table2.key上左连接table2 set table1.old_date = date_format(STR_TO_DATE(table2.string_date,'%Y%m%d'),'%Y-%m-%d');
答案 2 :(得分:0)
在使用Oracle MySQL Connector / J驱动程序的Squirrel中,
这有效:
select date('2016-01-11 06:40:10.188918 UTC') as bbb;
但这失败了:
drop table if exists temp_junk;
create temporary table temp_junk as
select date('2016-01-11 06:40:10.188918 UTC') as bbb;
错误:
Data Truncation error occurred on a write of column 0Data was 0 bytes long and 0 bytes were transferred.
Error occurred in:
create temporary table temp_junk as
select date('2016-01-11 06:40:10.188918 UTC') as bbb
在SQL小提琴(http://sqlfiddle.com/#!9/5025b3/1/0)中,我至少得到了一个不错的错误消息(但只有CREATE语句,简单的SELECT仍然成功):
Data truncation: Truncated incorrect datetime value: '2016-01-11 06:40:10.188918 UTC'
也许你的错误很相似。