2016-12-24 77 views
1

SQLite中,我的表如下:如何更新SQLite表与新列?

--------------------- 
Date   Temp 
--------------------- 
201309010051 82 
201309010151 81 
201309010251 80 
--------------------- 

我生成一个查询,如下所示,其修改日期时间格式从201309010051到2013年9月1日00:51。

下面是我用“日期”一栏做所有值查询:

select substr(Date, 1, 4)||"-"||substr(Date, 5, 2)||"-"||substr(Date, 7, 2) 
||" "||substr(Date, 9, 2)||":"||substr(Date, 11, 2) as CreatedColumn 
from myTable 

现在,我想将“CreatedColumn”添加到我的原始表。我试过如下:

update myTable set CreatedColumn = <my above query which modifies the datetime format> 

但是,它返回以下错误:

(sqlite3.OperationalError) near "select": syntax error 

我如何添加/追加从我的查询产生的原始表“CreatedColumn”?

+0

变化请包括您尝试使用的确切UPDATE查询。 – duskwuff

+0

你有没有考虑把你的日期/时间存储为纪元时间?并将任何需要完成的格式留给表示层。 –

+0

@joseph不,这个_whole_查询。 – duskwuff

回答

2

如果你已经列CreatedColumn可以设置列的值与下面的查询每一行:

UPDATE 
    myTable 
SET 
    CreatedColumn = substr(Date, 1, 4)||"-"||substr(Date, 5, 2)||"-"||substr(Date, 7, 2) ||" "||substr(Date, 9, 2)||":"||substr(Date, 11, 2) 
+0

这不是你在你的例子中所做的。在你的例子中,你有'SET SELECT ...',这不是你在我的例子中可以看到的。仔细阅读我的代码:) – Dekel

+0

我犯了一个错误,它工作正常。 – user121

+0

太棒了:)高兴地帮忙 – Dekel

3

即@Dekel写是将数据正确的查询。在将信息添加到新列之前,您必须首先创建它。

- 表和数据的插入的初始创建:

DROP TABLE IF EXISTS `myTable`; 
CREATE TABLE `myTable`(
    `Date` int, 
    `Temp` int 
); 

INSERT INTO `myTable` VALUES (201309010051,82), 
          (201309010151,81), 
          (201309010251,80); 

- SELECT *:

SELECT * FROM `myTable`; 
+------------+------+ 
| Date  | Temp | 
+------------+------+ 
| 2147483647 | 82 | 
| 2147483647 | 81 | 
| 2147483647 | 80 | 
+------------+------+ 
3 rows in set (0.00 sec) 

- ALTER TABLE

ALTER TABLE `myTable` ADD COLUMN `CreatedColumn` DATETIME; 

SELECT * FROM `myTable`; 
    +------------+------+---------------+ 
    | Date  | Temp | CreatedColumn | 
    +------------+------+---------------+ 
    | 2147483647 | 82 | NULL   | 
    | 2147483647 | 81 | NULL   | 
    | 2147483647 | 80 | NULL   | 
    +------------+------+---------------+ 
    3 rows in set (0.00 sec) 

- 更新CreatedColumn - 使用德克尔的命令

UPDATE 
    `myTable` 
SET 
    `CreatedColumn` = substr(Date, 1, 4)||"-"||substr(Date, 5, 2)||"-"||substr(Date, 7, 2) ||" "||substr(Date, 9, 2)||":"||substr(Date, 11, 2); 

- 显示表

SELECT * FROM `myTable`; 
    +------------+------+---------------------+ 
    | Date  | Temp | CreatedColumn  | 
    +------------+------+---------------------+ 
    | 2147483647 | 82 | 0000-00-00 00:00:00 | 
    | 2147483647 | 81 | 0000-00-00 00:00:00 | 
    | 2147483647 | 80 | 0000-00-00 00:00:00 | 
    +------------+------+---------------------+ 
    3 rows in set (0.00 sec) 
+0

不错的加法!你在这里得到我的投票:) – Dekel