【发布时间】:2023-04-04 00:22:01
【问题描述】:
我有这个表 Basket 有一个 TEXT 类型的列,这个 Notes 字段没有文本字段,为了简单起见,我在示例中的单词之间使用了一个空格下面,它可以有逗号或冒号或任何标点符号。 我正在为给定的三种水果列表搜索在备注字段中找到的第一个水果:Apple、Orange、Banana - 此搜索条件列表已修复。
| Notes |
|---|
| Banana; Apple, Bread. Oats! Milk |
| Orange, Apple;,. Banana: |
| Bread'' 'Oat &Milk |
| Apple, ;Sugar :Banana ,Orange. |
查询
SELECT Notes, CASE WHEN Notes ~* 'Apple' Then 'Apple'
WHEN Notes ~* 'Banana' Then 'Banana'
WHEN Notes ~* 'Orange' Then 'Orange'
ELSE NULL
END AS First_Fruit_Found
FROM Basket;
我的查询结果:
| Notes | First_Fruit_Found |
|---|---|
| Apple Sugar Banana Orange | Apple |
| Orange Apple Banana | Apple |
| Bread Oat Milk | NULL |
| Banana Apple Bread Oats Milk | Apple |
预期结果:
| Notes | First_Fruit_Found |
|---|---|
| Apple Sugar Banana Orange | Apple |
| Orange Apple Banana | Orange |
| Bread Oat Milk | NULL or Blank |
| Banana Apple Bread Oats Milk | Banana |
我的 CASE 语句查询给出了在 CASE 语句顺序中找到的水果的结果,我希望得到我在 Notes 列中找到的第一个水果的结果,如果我们可以使用 re 重写此查询,请提供帮助或 Postgres 中的任何 STRING 函数/运算符
【问题讨论】:
-
“xyzAppleabc”是否与“Apple”匹配?
-
是的,它应该返回 Apple
标签: postgresql