SQL startswith(在表达式上使用'LIKE`)

SQL startswith(在表达式上使用'LIKE`),sql,Sql,在SQL中使用表达式启动的合适方法是什么 我可以用类似的表达式| |'%”来表达,但我觉得它不太好看 完整查询的格式为: SELECT …, (SELECT COUNT(*) FROM post AS child WHERE child.path LIKE (post.path || '%') AND child.depth >= post.depth) FROM post WHERE … 我认为最好使用LIKE,因为

在SQL中使用表达式启动的合适方法是什么

我可以用类似的表达式| |'%”来表达,但我觉得它不太好看

完整查询的格式为:

SELECT …, (SELECT COUNT(*) 
           FROM post AS child 
           WHERE child.path LIKE (post.path || '%') 
          AND child.depth >= post.depth)
FROM post WHERE …
我认为最好使用LIKE,因为对于这种情况,DB索引是这样的。

只需使用LIKE'input%'。即:


我假设这是针对SQL Server的,虽然这种语法可能在标准SQL中的其他地方也适用,但您也可以说:

where position(post.path in child.path) = 0
我不知道您的RDBMS是否支持这一点。PostgreSQL确实如此。

您可以使用

其中日期类似于“[选择STRYEARGETDATE-1]”


其中child.path类似于“[SELECT STRYEARGETDATE-1]”post.path | |“%”

该语法在其他数据库上不起作用,因为+用于字符串连接是特定于Microsoft的。所有符合标准的DBMS都使用| |。但除此之外,我同意该语句应该适用于其他DBMS,这是我使用的,我在问题中也写了同样的东西。您正在编写一个相关子查询,您担心like子句的外观如何?你到底为什么要在乎这房子是否好看呢。在SQl语句中有三件事需要担心:它是否返回正确的结果,它是否执行得很好,提示相关子查询通常不会也应该避免,以及它是否安全?“看起来不错”甚至还不算第四名。它的性能尽可能好,实际上,这个特殊的子查询只针对所有返回对象的子集使用CASE WHEN。其他考虑因素也不是什么大问题,尽管在其他类似情况下,对安全性的关注可能会导致相同的问题。post.path是未被替换的,不是吗?在这种情况下,我怎样才能正确地逃脱呢?不过现在大家都知道它是安全的。这只是个问题。您的数据中是否可能有类似于post.path | |“%”和child.depthwhere position(post.path in child.path) = 0