访问更新语句:根据当前值更新

时间:2013-09-11 05:55:01

标签: sql date ms-access

我正在从外部Access数据库中检索数据。在这个数据库中,有一个列字段“recordTime”的格式如下dd/mm/yyyy hh:nn:ss AM/PM,但是该字段的类型是字符串(不要问我为什么不使用日期/时间,我可以控制不了这个。

现在我想更新此列字段以使其为yyyy-mm-dd hh:nn:ss,并且可能仍为字符串类型。我使用这样的查询:

        UPDATE  table1
        SET     recordTime = Format(recordTime, 'dd/mm/yyyy hh:nn:ss AM/PM');

我做错了吗?

2 个答案:

答案 0 :(得分:0)

由于您的列是string类型,因此您必须使用子串(如ms-access语法,如果您在access DB中工作)

SET recordTime= mid(recordTime,7,4) & "-" & mid(recordTime,4,2) & "-" & left(recordTime,2) & " " & mid(recordTime,12,8)

MS-SQL语法

SET recordTime= SUBSTRING(recordTime,7,4)+'-'+SUBSTRING(recordTime,4,2)+'-'+ LEFT(recordTime,2)+' '+SUBSTRING(recordTime,12,8)

答案 1 :(得分:0)

更新在MS Access中,默认日期格式为mm/dd/yyyy,因此在重新格式化之前,您必须通过交换ddmm部分来消除日期值的歧义。

UPDATE Table1
  SET recordTime = FORMAT(MID(recordTime, 4, 2) + '/' + 
                          LEFT(recordTime, 2) + 
                          MID(recordTime, 6), 'yyyy-mm-dd hh:nn:ss')
 WHERE recordTime LIKE '##/##/####*'

如果您最初的值为

11/09/2013 04:00:00 PM
23/09/2013 02:00:00 PM

然后在更新后你会得到

2013-09-11 16:00:00
2013-09-23 14:00:00