为 SQL 选择特定行时出现语法错误(在 R 中,使用 RSQLITE)
Syntax error when selecting specific rows for SQL (in R, using RSQLITE)
我正在尝试 select 来自纽约市帮助请求的 bigquery 数据中的一些行和列。我想要 select 五列 - 创建请求的日期、提出请求的城市、收到请求的机构等。
首先,我设法 select 我想要的列:
conn <- dbConnect(SQLite(),'nyc311.db')
dbListFields(conn, "requests")
df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor FROM requests)
Agency Created Date Complaint Type City Descriptor
1 DOHMH 01/25/2016 02:11:12 AM Indoor Air Quality BRONX Chemical Vapors/Gases/Odors
2 NYPD 01/25/2016 02:08:08 AM Noise - Vehicle NEW YORK Car/Truck Horn
3 NYPD 01/25/2016 02:07:24 AM Noise - Street/Sidewalk NEW YORK Loud Talking
4 CHALL 01/25/2016 02:05:00 AM Opinion for the Mayor HOUSING
5 HRA 01/25/2016 02:01:46 AM Benefit Card Replacement Medicaid
6 NYPD 01/25/2016 01:54:56 AM Blocked Driveway CORONA No Access
如何从 .db 文件 select 中获取 agency=NYPD、City=Bronx 和 Queens;创建日期 = 2015 年?我尝试了以下操作,但出现语法错误。
df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="NYPD"
AND YEAR(Created Date)=2015')
我是初学者,所以我不清楚如何对年份进行子集化,因为创建日期以字符格式显示日期和时间,而不是整数。我还注意到代码运行 YEAR(Created Date)=2015
部分除外
SQLite 中没有 YEAR()
函数(尽管 MySQL 有一个,因此你会感到困惑)。首先请注意,您将日期存储为文本,并且还以 mm/dd/yyyy
的非 ANSI 格式存储。为了比较每条记录的年份,您必须使用 SQLite 的字符串函数提取此信息。以下应该有效:
SUBSTR("Created Date", 7, 4)
请注意,您还需要将 Created Date
列名称放在双引号中以转义空格。
这是我要使用的实际查询:
SELECT "Agency",
"Created Date",
"Complaint Type",
"City",
"Descriptor"
FROM requests
WHERE City IN ('BRONX', 'QUEENS') AND
Agency = 'DOHMH' AND
SUBSTR("Created Date", 7, 4) = '2015' -- compare against the string '2015'
一些注意事项: SQL 中的惯例是对字符串数据使用单引号。您可以将所有列名放在双引号中,但只有在您有空格、关键字等时才有必要。
我认为创建日期有语法错误
检查这个
'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="DOHMH"
AND YEAR("Created Date")=2015'
我正在尝试 select 来自纽约市帮助请求的 bigquery 数据中的一些行和列。我想要 select 五列 - 创建请求的日期、提出请求的城市、收到请求的机构等。
首先,我设法 select 我想要的列:
conn <- dbConnect(SQLite(),'nyc311.db')
dbListFields(conn, "requests")
df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor FROM requests)
Agency Created Date Complaint Type City Descriptor
1 DOHMH 01/25/2016 02:11:12 AM Indoor Air Quality BRONX Chemical Vapors/Gases/Odors
2 NYPD 01/25/2016 02:08:08 AM Noise - Vehicle NEW YORK Car/Truck Horn
3 NYPD 01/25/2016 02:07:24 AM Noise - Street/Sidewalk NEW YORK Loud Talking
4 CHALL 01/25/2016 02:05:00 AM Opinion for the Mayor HOUSING
5 HRA 01/25/2016 02:01:46 AM Benefit Card Replacement Medicaid
6 NYPD 01/25/2016 01:54:56 AM Blocked Driveway CORONA No Access
如何从 .db 文件 select 中获取 agency=NYPD、City=Bronx 和 Queens;创建日期 = 2015 年?我尝试了以下操作,但出现语法错误。
df<-dbGetQuery(conn, 'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="NYPD"
AND YEAR(Created Date)=2015')
我是初学者,所以我不清楚如何对年份进行子集化,因为创建日期以字符格式显示日期和时间,而不是整数。我还注意到代码运行 YEAR(Created Date)=2015
SQLite 中没有 YEAR()
函数(尽管 MySQL 有一个,因此你会感到困惑)。首先请注意,您将日期存储为文本,并且还以 mm/dd/yyyy
的非 ANSI 格式存储。为了比较每条记录的年份,您必须使用 SQLite 的字符串函数提取此信息。以下应该有效:
SUBSTR("Created Date", 7, 4)
请注意,您还需要将 Created Date
列名称放在双引号中以转义空格。
这是我要使用的实际查询:
SELECT "Agency",
"Created Date",
"Complaint Type",
"City",
"Descriptor"
FROM requests
WHERE City IN ('BRONX', 'QUEENS') AND
Agency = 'DOHMH' AND
SUBSTR("Created Date", 7, 4) = '2015' -- compare against the string '2015'
一些注意事项: SQL 中的惯例是对字符串数据使用单引号。您可以将所有列名放在双引号中,但只有在您有空格、关键字等时才有必要。
我认为创建日期有语法错误 检查这个
'SELECT "Agency", "Created Date", "Complaint Type", "City", Descriptor
FROM requests WHERE City IN ("BRONX", "QUEENS") AND Agency="DOHMH"
AND YEAR("Created Date")=2015'