我有下面的数据表(名称表1),我必须从每一行中提取英语部分,例如从第一行"教育部门“中。
| 识别码|名称名称名称|
| - -|- -|
| 一个|PK:“";英国:“2.教育部门”; SP:“部门教育”; GR:“2.教育部门”; FR:“2.教育部门”;|
| 2个|英国:“3.足球:俯仰/地面”; SP:“3.足球场”; GR:“3.足球场/博登”; NR:“3.足球毒素/毒素”; FR:“3.足球地形”;|
| 三个|JP:“"; GR:“1.施塔特:豪普斯特”; SP:“1.城市:主要城市/首都”;英国:“1.城市:主要城市/首都”; FR:“1.维尔:主要城市/首都”; NR:“1.作者:霍维比/霍维斯塔德”;印度:“";|
| 四个|AF:“"; IND:“"; GR:“4.安德雷”; SP:“4.其他”; FR:“"; NR:“4.安德烈”; FR:“4.其他国家”;英国:“4.其他”|
我希望结果1是这样的,但无法解决它:
| 识别码|名称名称名称|
| - -|- -|
| 一个|2.教育部门|
| 2个|3.足球:沥青/地面|
| 三个|1.城市:主城/首府|
| 四个|四、其他|
我正在尝试这种方法,但没有得到预期的结果:
SELECT SUBSTRING(LEFT(name, CHARINDEX(';', name) + 1, 100)
FROM table1
WHERE CHARINDEX('\[', name) = "2. Education Sector" OR CHARINDEX('\[', name) = "3. Football: pitch/ground" OR CHARINDEX('\[', name) = "1. City: main city/capital" OR CHARINDEX('\[', name) = "4. Others";
我期待结果2,但无法解决:
| 识别码|名称名称名称|
| - -|- -|
| 一个|教育部门|
| 2个|足球:球场/地面|
| 三个|城市:主城/首府|
| 四个|其他|
我正在尝试这种方式,但它没有得到我预期的结果:
SELECT SUBSTRING(LEFT(name, CHARINDEX(';', name) + 1, 100)
FROM table1
WHERE CHARINDEX('\[', name) = "Education Sector" OR CHARINDEX('\[', name) = "Football: pitch/ground" OR CHARINDEX('\[', name) = "City: main city/capital" OR CHARINDEX('\[', name) = "Others";
有什么建议吗?
4条答案
按热度按时间j8yoct9x1#
因为您标记了
sql-server
,所以我可以提供以下简单的方法(假设您使用的是SQL Server和完全支持的版本):我本来要删除这个答案,但我会把它留在这里,以防你可以利用它在SQLLite -我不熟悉的产品个人。
查看Demo Fiddle
mbyulnm02#
您可以尝试
LEFT
和RIGHT
的组合。1.在
Name
列中查找“UK:“1.使用
RIGHT
和LEN
获取以“UK:“”开头的所有内容1.在剩余字符串中查找第一个“"-这是最后一个字符的位置
1.把所有的东西都举到拳头上“"--这就是你的结果
请注意,此解决方案假定字符串的结构始终相同:以'UK:“'开头,以'”'结尾。
kr98yfug3#
我会这样做:
4si2a6ki4#
这个方法使用递归调用来拆分字符串的分隔符,然后从中选择。改编自this post。
第一个'with'(通用表表达式)只设置测试数据(在这里像临时表一样使用)。第二个名为split的表达式解析分号上的字符串,生成由id和解析的字符串元素组成的行的CTE。取消注解后面的查询以查看。然后,最后一个查询选择以'UK'开头的行并返回内容。