我有一个带书名的表格,我想选择标题与正则表达式匹配的书籍,并按标题中正则表达式匹配的位置排序结果.
单词搜索很容易.例如
TABLE book
id title
1 The Sun
2 The Dead Sun
3 Sun Kissed
Run Code Online (Sandbox Code Playgroud)
我打算把.*发送查询DB之前,字与字之间在客户端的搜索词,所以我会写在这里准备的正则表达式SQL.
SELECT book.id, book.title FROM book
WHERE book.title ~* '.*sun.*'
ORDER BY COALESCE(NULLIF(position('sun' in book.title), 0), 999999) ASC;
RESULT
id title
3 Sun Kissed
1 The Sun
2 The Dead Sun
Run Code Online (Sandbox Code Playgroud)
但是如果搜索词有多个单词,我想匹配标题,这些标题包含搜索词中的所有单词和它们之间的任何内容,并按照之前的位置排序,所以我需要一个返回正则表达式位置的函数,我没有在PostgreSQL官方文档中找到合适的一个.
TABLE books
id title
4 Deep Space Endeavor
5 Star Trek: Deep Space Nine: The Never Ending Sacrifice
6 Deep Black: Space Espionage and National Security
SELECT book.id, book.title FROM …Run Code Online (Sandbox Code Playgroud) 我看到这样的代码:
try:
print abc # actually different code was here but it doesn't matter, right?
except:
raise
Run Code Online (Sandbox Code Playgroud)
是否有理由投入print abc这种奇怪的try: except: raise建筑?Except子句只有一个raise操作,所以如果捕获了异常,它只被重新加入外部,对吧?所以我猜这个结构除了代码行之外什么也没带来,对吗?