通过字符串日期转换更新日期时间

时间:2016-03-04 12:30:00

标签: mysql datetime

我想从另一个表的字段更新日期字段,如下所示:

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日

3 个答案:

答案 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'

也许你的错误很相似。