SQL处理RSS源会议名称:仅移除日期前连字符的实现方案
解决SQL会议名称格式化的连字符截断问题
从RSS提取会议名称插入dbo.Meeting表时,原SQL通过定位第一个连字符来截断日期后缀,但遇到会议名本身包含连字符(比如City-County Homeless Issues Committee)的情况时,会错误截断有效名称,只保留City这类不完整内容。
优化方案:定位最后一个连字符
核心思路是:日期后缀始终在最后一个连字符之后,因此通过反转字符串找到最后一个连字符的位置,就能精准提取完整的会议名称,无需判断连字符数量。
测试代码
DECLARE @myText as varchar(100) = 'Police Civilian Oversight Board Community Engagement Subcommittee - December 12, 2024' --DECLARE @myText as varchar(100) = 'City-County Homeless Issues Committee - December 2, 2024' SELECT FORMAT(GETDATE(), 'MM/dd/yyyy hh:mm tt') + ' - ' + LEFT(@myText, LEN(@myText) - CHARINDEX('-', REVERSE(@myText)) - 1) AS MeetingName
代码解释
REVERSE(@myText):将字符串反转,原字符串的最后一个连字符变为反转后的第一个连字符CHARINDEX('-', REVERSE(@myText)):获取反转后第一个连字符的位置,对应原字符串最后一个连字符的偏移量LEN(@myText) - CHARINDEX('-', REVERSE(@myText)) - 1:计算原字符串中最后一个连字符前的字符长度,-1是为了去掉连字符前的空格(比如- December中的空格)
完整插入语句
INSERT INTO dbo.Meeting SELECT a.MeetingID, FORMAT(a.MeetingDate, 'MM/dd/yyyy hh:mm tt') + ' - ' + LEFT(a.MeetingName, LEN(a.MeetingName) - CHARINDEX('-', REVERSE(a.MeetingName)) - 1) AS MeetingName, MeetingTitle FROM -- 替换为你的源表或子查询 YourSourceTable a
兼容无日期后缀的情况
如果存在部分会议名没有日期后缀(无连字符),可以添加判断避免报错:
INSERT INTO dbo.Meeting SELECT a.MeetingID, FORMAT(a.MeetingDate, 'MM/dd/yyyy hh:mm tt') + ' - ' + CASE WHEN CHARINDEX('-', a.MeetingName) > 0 THEN LEFT(a.MeetingName, LEN(a.MeetingName) - CHARINDEX('-', REVERSE(a.MeetingName)) - 1) ELSE a.MeetingName END AS MeetingName, MeetingTitle FROM YourSourceTable a
内容的提问来源于stack exchange,提问作者erasmo carlos
相关产品推荐
相关产品推荐

