【问题标题】:Converting Text Time to Numbers将文本时间转换为数字
【发布时间】:2014-04-30 09:36:40
【问题描述】:

我正在尝试将记录为 TEXT 的两个时间值转换为数值以用于计算出差异,这将在视图中实现。

我目前的尝试如下。

CREATE VIEW TimeTakenSwimming AS 
SELECT UserDetails.username AS username, 
       SwimmingRecords.distance_in_miles AS distance, 
       SwimmingRecords.start_time AS starttime, 
       SwimmingRecords.end_time AS endtime, 
       sum((strftime('%s', end_time) - strftime('%s', start_time)) AS timedifference,
FROM UserDetails INNER JOIN SwimmingRecords ON UserDetails.username = SwimmingRecords.username;

现在,我目前收到与“AS”语法相关的错误。我已经完成并更正了任何缺少的空格,从 SUM 计算中添加了缺少的括号等,但是在实施时我仍然收到所述的语法错误。

下面是与我的架构相关的代码,以允许其他人尝试复制该问题,我已使用 SQLite 管理器 Firefox 插件来实现此系统。

CREATE TABLE "UserDetails" (
    "username" TEXT PRIMARY KEY  NOT NULL  UNIQUE  CHECK (length(username)>0), 
    "password" TEXT NOT NULL  CHECK (length(password)>3), 
    "email_address" TEXT NOT NULL  UNIQUE CHECK (length(email_address)>3) , 
    "weight_in_pounds" REAL NOT NULL CHECK(weight_in_pounds>0) CHECK (length(weight_in_pounds)>0), 
    "height_in_inches" REAL NOT NULL CHECK(height_in_inches>0) CHECK (length(height_in_inches)>0), 
    "age" INTEGER CHECK(age>0), WITHOUT ROWID
    )

CREATE TABLE "SwimmingRecords" (
    "record_ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE CHECK (record_ID>0) , 
    "distance_in_miles" REAL NOT NULL CHECK (distance_in_miles>0) , 
    "num_of_lengths" REAL NOT NULL CHECK(num_of_lengths>0), "username" TEXT NOT NULL , 
    "date" DATETIME DEFAULT CURRENT_DATE, "notes" TEXT(50), 
    "start_time" TEXT, 
    "end_time" TEXT, 
    FOREIGN KEY(distance_in_miles) REFERENCES DistanceinMiles(distance_in_miles) ON DELETE CASCADE ON UPDATE CASCADE, 
    FOREIGN KEY(num_of_lengths) REFERENCES NumberOfLengths(num_of_lengths) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY(username) REFERENCES UserDetails(username)ON DELETE CASCADE ON UPDATE CASCADE
    )

提前感谢您的帮助。

【问题讨论】:

    标签: database view time sqlite


    【解决方案1】:

    sum 之后的左括号太多,FROM 之前的逗号错误:

    CREATE VIEW ...
    SELECT ...,
           sum(strftime('%s', end_time) - strftime('%s', start_time)) AS timedifference
    FROM ...;
    

    【讨论】:

    • 非常感谢,我知道我错过了一些非常简单的事情,再次真诚的感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多