从VARCHAR列源表创建具有布尔列类型的表



因此,我有下表:

CREATE TABLE response (response_id INT, utime INT, 
question_id INT, response VARCHAR(500))
INSERT INTO response (response_id,  utime, question_id, response)
VALUES (5,1459542506,11,1),(5,1459542506,12,0),(5,1459542506,13,0),
(5,1459542506,14,0),(5,1459542506,15,0),(7,1458210291,11,0),(7,1458210291,12,1),
(7,1458210291,13,1),(7,1458210291,14,0),(7,1458216077,15,1),(10,1458212391,11,1),
(10,1458212391,12,0),(10,1458212391,13,1),(10,1458212391,14,0),(10,1458212391,15,0)

哪个商店调查人们在指定时间内的活动反应。每个question_id代表五种可能性中的一个问题。对用户的响应指示了他从所有可能性中的选择。他/她没有回答的地方被认为是假的。

question_id  |   activity
------------+----------   
11           -   sitting
12           -   walking
13           -   standing
14           -   running
15           -   jogging

这些回答存储在列response中,用于每个问题的值。例如,response_id=5的反应是坐着,没有其他活动,response_id=7是走路、站着、慢跑。

不幸的是,在源表中,response被定义为类型VARCHAR,而不是BOOLEAN

我想创建一个新的表,描述报告此类活动的每个response的活动。我的做法如下:

CREATE TABLE target_table AS
SELECT response_id, to_timestamp(utime), response = 'true' activity
FROM response; 
=> SELECT 15
-- but then
SELECT * FROM target_table WHERE activity IS TRUE
=> SELECT 0

同样,活动列值均报告为f

response_id  activity_day       activity
5        2016-04-01 21:28:26+01  f
5        2016-04-01 21:28:26+01  f
5        2016-04-01 21:28:26+01  f

所需输出

我想在中有target_table

response_id  | activity_day        | activity 
-------------+---------------------+---------
5         2016-04-01 21:28:26    sitting
7         2016-03-17 10:24:51    walking
7         2016-03-17 10:24:51    standing
7         2016-03-17 10:24:51    jogging
10         2016-03-17 10:59:51    sitting
10         2016-03-17 10:59:51    standing 
....

注意:我提供这个dbfiddle

创建这样的target_table:

CREATE TABLE target_table AS
SELECT response_id, to_timestamp(utime) AS activity_day, response = '1' activity
FROM response 

在此之后,选择TRUE答案:

SELECT * FROM target_table WHERE activity 

请参阅:DBFIDDLE

这个新表(target_table(将由以下列创建:

select 
column_name,
data_type
from information_schema.columns 
where table_name='target_table';

输出:

column_name数据类型
response_idinteger
activity_day带时区的时间戳
活动布尔值

最新更新