Mar*_*rgP 2 sql sql-server date
我有一个类似下面的数据集,我想从中删除日期组件.一个挑战是日期可以采用不同的格式,如下所示.
现有产出
Event A 05-25-2015
Event B 25-05-2015
Event C April 2015
Event D 2016
Run Code Online (Sandbox Code Playgroud)
期望的输出
Event A
Event B
Event C
Event D
Run Code Online (Sandbox Code Playgroud)
一些让你入门的东西.根据您可能面临的格式数量,您可能希望将它们全部作为模式放入表中,连接到该表,并用于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
Run Code Online (Sandbox Code Playgroud)
我的猜测是,这非常容易出错,如果某人有一个名为"Event 6421"的事件,可能会发现误报.
这也只处理您的示例数据中的格式.我想你可能需要处理更多,但这应该指向正确的方向.
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |