我正在做Yelp Dataset。以下是来自coursera课程的Yelp Dataset的ER图。
在实体(Hours)中,属性(hours)包含商家营业时间的日期和时间数据。 (例如,星期一|12:00-23:00)。我想从这些数据中提取小时数。
我遇到了在 sql 中使用带有通配符的 TRIM() 函数来提取的示例代码。以下是我尝试的示例代码和结果。我不明白通配符在 sqlite 中的 Trim 函数中是如何工作的。例如:TRIM(H.hours,“%MondayTuesWednesThursFriSatSun|%”)中的“%MondayTuesWednesThursFriSatSun|%”。它从小时属性数据中删除星期一、星期二、星期三、星期四、星期五、星期六、星期日。
Hours 实体中 hours 属性的数据
小时 |
---|
周一12:00-23:00 |
周二 9:00-19:00 |
示例代码
SELECT B.name as B_Name,MAX(CASE WHEN H.hours LIKE '%monday%' THEN TRIM(H.hours,"%MondayTuesWednesThursFriSatSun|%") END) AS Mon_hours FROM business B INNER JOIN hours H ON B.id = H.business_id GROUP BY B.id;
结果 |公司名称 |星期一_小时 | | :--------------------:| :------------:| |燃烧的厨房| 12:00-23:00 | |弗里曼的汽车音响| 9:00-19:00 |
像这样在每个工作日使用嵌套的 REPLACE() 函数:
SELECT (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(H.hours, 'Monday|', ''), 'Tuesday|', ''), 'Wednesday|', ''), 'Thursday|', ''), 'Friday|', ''), 'Saturday|', ''), 'Sunday|', '') )AS Mon_hours
FROM business B
INNER JOIN hours H ON B.id = H.business_id