获取数据替换大括号之间的文本()

Get data replacing text between braces()

提问人:RealSteel 提问时间:9/6/2023 最后编辑:Thom ARealSteel 更新时间:9/6/2023 访问量:58

问:

我有一个表格,其中的位置数据可以采用 3 种不同的格式,如下所示

  1. 美国(US);纽约 (NY)
  2. 美国(US);纽约
  3. 美国;纽约

我必须使用上述所有 3 种格式提取所有记录。
因此,我尝试将大括号中的内容替换为空,然后开始比较。

查询是

select * from TaxonomyLocations_Archive 
where REPLACE(REPLACE(TaxonomyHierarchy, 
SUBSTRING(TaxonomyHierarchy, 
CHARINDEX('(', TaxonomyHierarchy), 
CHARINDEX(')', TaxonomyHierarchy) - 
CHARINDEX('(', TaxonomyHierarchy) + 1), ''), 
' ;', ';') ='United States;New York'

但是上面的查询只是比较数据,直到第一次出现括号,并且只返回与第二和第三格式 [ 和 ] 的匹配项。United States (US);New YorkUnited States;New York

请向我建议我必须做的更改,以使其也适用于第一种格式 []。United States (US);New York (NY)

sql-server 子字符串 charindex

评论

3赞 Thom A 9/6/2023
这感觉就像您应该修复源数据,以便同一值不会有 3 个不同的值。
0赞 Thom A 9/6/2023
但是,该语法不会具有性能。为什么不使用 ?IN
3赞 The Impaler 9/6/2023
使用清理数据创建一个额外的列,并搜索此列。不要在飞行中消毒。
0赞 Stu 9/6/2023
如果你的数据是,你能保证城市永远跟随国家,会发生什么?如果有人使用等怎么办?New York; United StatesUSA
0赞 RealSteel 9/7/2023
@Stu - 我的数据将始终采用国家/地区格式;城市,而不仅仅是国家数据中的代码。数据库中只有上述 3 种格式

答:

0赞 Vasiliy Volk 9/6/2023 #1

变体:

select * from TaxonomyLocations_Archive 
where TaxonomyHierarchy like 'United States%' AND TaxonomyHierarchy like '%;New York%'