Sql 选择文本替换的位置

Sql 选择文本替换的位置,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图从tblReportTitles中选择ReportTitle替换美国文本的位置。我的预期结果是有一个选择返回第三排在线商店没有任何国家在它的结尾 当前,当我选择: WHERE i.ReportTitle = (REPLACE(i.ReportTitle, 'in US' , '')) 我的查询没有返回任何行 如何从表中选择它将替换文本并与tblReportTitles中的文本匹配 以下是我的表格示例: 乡下人 报告标题 报告ID 艾德里亚 1. 美国的网上商店 21 1. 2. 加拿大的

我试图从tblReportTitles中选择ReportTitle替换美国文本的位置。我的预期结果是有一个选择返回第三排在线商店没有任何国家在它的结尾

当前,当我选择:

WHERE i.ReportTitle = (REPLACE(i.ReportTitle, 'in US' , ''))
我的查询没有返回任何行

如何从表中选择它将替换文本并与tblReportTitles中的文本匹配

以下是我的表格示例:

乡下人 报告标题 报告ID 艾德里亚 1. 美国的网上商店 21 1. 2. 加拿大的网上商店 37 1. 3. 网上商店 14 1.
嗯。如果前13个字符的标题都相同,则可以使用left:

或者,如果初始部分可能发生变化,则在“输入”之前获取所有信息:

select left(reportitle, charindex(' in ', reportitles + ' in '))

我想我知道你在找什么了。下面通过使用子查询而不是联接来获取所需标题,从而返回所需结果

然而,对于这个国家来说,这是一个非常具体的解决方案。更通用的解决方案会更复杂

DECLARE @ReportTitles TABLE (CountryId int, ReportTitle varchar(62), ReportId int, AreaId int);

INSERT INTO @ReportTitles (CountryId, ReportTitle, ReportId, AreaId)
VALUES
(1, 'Online Stores in US', 21, 1),
(2, 'Online Stores in Canada', 37, 1),
(3, 'Online Stores', 14, 1);

SELECT
    T.CountryId
    , T.ReportTitle
    , T.ReportId
    , T.AreaId
FROM @ReportTitles T
WHERE T.ReportTitle = (
    SELECT
        REPLACE(T1.ReportTitle, 'in US' , '')
    FROM @ReportTitles T1
    WHERE T1.CountryId = 1
    AND T1.ReportId = 21
);

注意完整的MRE和DDL+DML+样本数据。这样做会使人们更容易提供帮助。并让您有机会在发布问题CountryId IdCountry之前删除语法错误。

请提供示例数据和所需输出,您的问题不清楚。提问时,您需要提供一个最小的可重复示例。请参考以下链接:请提供以下内容:1 DDL和示例数据填充,即创建表和插入T-SQL语句。2您需要做什么,即逻辑和代码尝试在T-SQL中实现它。3期望输出,基于上述1中的样本数据。4您的SQL Server版本选择@@version;目前,您要求SQL返回一行,其中i.ReportTitle等于一个值,其中i.ReportTitle中的某些字符已被删除。。。。。本质上,您要问的是‘美国的在线商店’=‘在线商店’的位置,所以这永远不会返回一行,因为该表达式的计算结果总是False。您还应该包括一个示例,说明您希望数据如何显示,因为目前您的查询没有真正意义,您确实希望在where子句中避免这种计算,因为它不可搜索,因此可能会执行得很差。@Craig我已经提供了所需的结果。实际上,我正在尝试从表中进行选择。使用美国标题中的在线商店删除国家前缀,并在表中选择有在线商店的任何值,我不确定替换是否正确?但我希望这能澄清我的问题。
DECLARE @ReportTitles TABLE (CountryId int, ReportTitle varchar(62), ReportId int, AreaId int);

INSERT INTO @ReportTitles (CountryId, ReportTitle, ReportId, AreaId)
VALUES
(1, 'Online Stores in US', 21, 1),
(2, 'Online Stores in Canada', 37, 1),
(3, 'Online Stores', 14, 1);

SELECT
    T.CountryId
    , T.ReportTitle
    , T.ReportId
    , T.AreaId
FROM @ReportTitles T
WHERE T.ReportTitle = (
    SELECT
        REPLACE(T1.ReportTitle, 'in US' , '')
    FROM @ReportTitles T1
    WHERE T1.CountryId = 1
    AND T1.ReportId = 21
);