SQL查询trim列?

SQL query trim a column?

我正在使用以下查询来填充一些数据。从第 "query expression" 列中,有没有办法删除 N'Domain\

左侧的任何文本

基本上我只想查看 "Query Expression" 列中 N'Domain\ 之后的文本。不知道该怎么做。

SELECT
  v_DeploymentSummary.SoftwareName,
  v_DeploymentSummary.CollectionName,
  v_CollectionRuleQuery.QueryExpression
FROM
v_DeploymentSummary
INNER JOIN v_CollectionRuleQuery
ON v_DeploymentSummary.CollectionID = v_CollectionRuleQuery.CollectionID

至少 SQL 服务器:

SUBSTRING([v_CollectionRuleQuery.QueryExpression], CHARINDEX('N''Domain\', [v_CollectionRuleQuery.QueryExpression]) + 9, LEN([v_CollectionRuleQuery.QueryExpression])

试一试。

我不明白你是否想在你的字符串中包含 N'Domain\ 如果是这样的话,只需删除 +9。

据我了解,您想要这样的东西:

SELECT
  v_DeploymentSummary.SoftwareName,
  v_DeploymentSummary.CollectionName,
  SUBSTRING([v_CollectionRuleQuery.QueryExpression], CHARINDEX('N''Domain\', [v_CollectionRuleQuery.QueryExpression]) + 9, LEN([v_CollectionRuleQuery.QueryExpression])
FROM
v_DeploymentSummary
INNER JOIN v_CollectionRuleQuery
ON v_DeploymentSummary.CollectionID = v_CollectionRuleQuery.CollectionID

在SQL服务器中,你可以使用stuff()来达到这个目的:

SELECT ds.SoftwareName, ds.CollectionName,
       STUFF(crq.QueryExpression, 1,
             CHARINDEX('Domain\', rq.QueryExpression) + LEN('Domain\') - 1,
             '')
FROM v_DeploymentSummary ds INNER JOIN
     v_CollectionRuleQuery crq
     ON ds.CollectionID = crq.CollectionID;

请注意,使用 table 别名使查询更易于编写和阅读。

试试这个,它不会更改没有文本 N'Domain 的 QueryExpression 的值,并且不要求 N'Domain 是第一个文本:

SELECT
  ds.SoftwareName,
  ds.CollectionName,
  crq.QueryExpression
  STUFF(crq.QueryExpression, 1, charindex('N''Domain\', 
    REPLICATE('w', LEN('N''Domain\')-1) + crq.QueryExpression), '')
FROM
  v_DeploymentSummary ds
JOIN 
  v_CollectionRuleQuery crq
ON ds.CollectionID = crq.CollectionID

示例:

SELECT 
  STUFF(x, 1, charindex('N''Domain\', 
    replicate('w', LEN('N''Domain\')-1) + x), '')
FROM (values('N''Domain\xxx'),('N''Doma'),('xxN''Domain\yyy')) x(x)

结果:

xxx
N'Doma
yyy