我有一个如下所示的数据集,我想从中删除日期组件。一项挑战是日期可以采用不同的格式,如下所示。
现有输出
Event A 05-25-2015
Event B 25-05-2015
Event C April 2015
Event D 2016
所需输出
Event A
Event B
Event C
Event D
最佳答案
一些可以帮助您入门的东西。根据您可能面临的格式数量,您可能希望将它们作为模式全部放入表中,联接到该表并使用 LEN
计算 STUFF
的值命令。
DECLARE @test TABLE (my_string VARCHAR(50) NOT NULL)
INSERT INTO @test (my_string)
VALUES
('Event A 05-25-2015'),
('Event B 25-05-2015'),
('Event C April 2015'),
('Event D 2016')
SELECT
CASE
WHEN PATINDEX('%[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%', my_string) > 0
THEN STUFF(my_string, PATINDEX('%[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%', my_string), 10, '')
WHEN PATINDEX('%April [0-9][0-9][0-9][0-9]%', my_string) > 0
THEN STUFF(my_string, PATINDEX('%April [0-9][0-9][0-9][0-9]%', my_string), 10, '')
WHEN PATINDEX('%[0-9][0-9][0-9][0-9]%', my_string) > 0
THEN STUFF(my_string, PATINDEX('%[0-9][0-9][0-9][0-9]%', my_string), 4, '')
ELSE my_string
END AS my_string
FROM
@test
我的猜测是,这非常容易出错,并且如果某人有名为“事件 6421”的事件,则可能会发现误报。
这也仅处理示例数据中的格式。我认为您可能需要处理更多,但这应该指向正确的方向。
关于sql - 从 SQL 文本中删除日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734169/