sqlite SQL中带通配符的TRIM函数

u91tlkcl  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(189)

我正在做Yelp Dataset。下面是来自coursera课程的Yelp数据集的ER图。
ER Diagram of Yelp Dataset from Coursera
在实体(Hours)中,属性(hours)包含企业营业时间的日期和时间数据。(例如,星期一|12:00-23:00)。我想从这些数据中提取小时数。
我遇到了在sql中使用TRIM()函数和通配符进行提取的示例代码。我不明白通配符在sqlite中的Trim函数中是如何工作的。例如:“%星期一星期二星期三星期四星期五星期日|%”in TRIM(H.hours,"% MondayTuesWednesThursFrisSatSun|它从以小时为单位的数据属性中删除星期一、星期二、星期三、星期四、星期五、星期六、星期日。

数据来自小时实体中的小时属性

小时
周一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
Freeman的汽车音响9:00-19:00
0s7z1bwu

0s7z1bwu1#

对每个工作日使用嵌套的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
pinkon5k

pinkon5k2#

SQLite中的TRIM()函数将删除第一个参数中的字符。
示例:

select trim('abcdefghij','acgij');
  • 这将删除a,因为第一个参数以a开头,但不会删除c,因为b仍然存在。
  • 在字符串的末尾,ji被删除,但g没有被删除,因为字母h仍然存在。

结果将是:bcdefgh

相关问题