Ste*_*ven 5 sql t-sql sql-server-2008
我在我的数据库中有这个表和数据:
tblPhotos
ID | Title | Description
------------------------------
1 | NULL | Some data - Title 123 - Subtitle - Photographer: John Doe
2 | NULL | Some data - Photographer: Jane Doe
3 | NULL | Some data - Title 345 - Photographer: John Doe Jr
Run Code Online (Sandbox Code Playgroud)
该Description列中的数据有两种格式:
{GARBAGE DATA} - {TITLE DATA} - Photographer: ..., or
{GARBAGE DATA} - Photographer: ...
Run Code Online (Sandbox Code Playgroud)
基本上,我有数千行,其中Title列是空的.我需要以某种方式将其从Description列中拉出来.
第Title一个破折号与Description列的最后一个破折号之间存在.这是数据应该是什么样子:
tblPhotos
ID | Title | Description
-------------------------------------------------------------------------------------
1 | Title 123 - Subtitle | Some data - Title 123 - Subtitle - Photographer: John Doe
2 | NULL | Some data - Photographer: Jane Doe
3 | Title 345 | Some data - Title 345 - Photographer: John Doe Jr
Run Code Online (Sandbox Code Playgroud)
如何创建一个解析列的脚本,并使用该解析数据更新另一列?
第一个破折号的位置很简单:CHARINDEX('-', Description)。第二个破折号的位置也很简单,但您需要最后一个破折号的位置。这有点困难,因为你必须反转字符串才能得到它:LEN(Description) - CHARINDEX('-', REVERSE(Description))。为了得到中间的东西,你需要通过减去两个位置来找到长度:
SUBSTRING(Description, CHARINDEX('-', Description) + 1, LEN(Description) - CHARINDEX('-', REVERSE(Description))) - CHARINDEX('-', Description)
把它们放在一起你会得到:
UPDATE tblPhotos
SET Title = RTRIM(LTRIM(
SUBSTRING(Description,
CHARINDEX('-', Description) + 1,
LEN(Description) - CHARINDEX('-', REVERSE(Description))
- CHARINDEX('-', Description))))
WHERE Title IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
912 次 |
| 最近记录: |