SQL startswith (используя `LIKE`) в выражении

Каким образом можно выполнить startswith(expression) в SQL?

Я могу сделать это с помощью LIKE ((expression) || '%'), но мне это выглядит не очень хорошо.

Полный запрос находится в форме:

SELECT …, (SELECT COUNT(*) 
           FROM post AS child 
           WHERE child.path LIKE (post.path || '%') 
          AND child.depth >= post.depth)
FROM post WHERE …

Я предполагаю, что предпочтительнее использовать LIKE из-за индексации DB для этого случая.

Ответы

Ответ 1

Просто используйте LIKE 'input%'. То есть:

WHERE child.path LIKE post.path + '%'

(Я предполагаю, что это для SQL Server, хотя этот синтаксис, вероятно, работает в другом месте)

Ответ 2

В стандартном SQL вы также можете сказать:

where position(post.path in child.path) = 0

Я не знаю, поддерживает ли ваша РСУБД это. PostgreSQL делает.

Ответ 3

Вы можете использовать

where DATE LIKE '[(SELECT STR(YEAR(GETDATE())-1))]%'

WHERE child.path LIKE '[(SELECT STR(YEAR(GETDATE())-1))]%' (post.path || '%')