如何在SQL Server中的连字符之间分解信息



我将如何拆开包含字符串的列:

92873-987DSFKJ80-2002-04-11
20392-208KJ48384-2008-01-04

数据看起来像这样:

Filename     Yes/No     Key
Abidabo      Yes        92873-987dsfkj80-2002-04-11
Bibiboo      No         20392-208kj48384-2008-01-04

希望它看起来像这样:

Filename     Yes/No     Key
Abidabo      Yes        92873-987dsfkj80-20020411
Bibiboo      No         20392-208kj48384-20080104

最终我想在20020411和20080104结束日期。从右侧,信息始终是相同的。从左侧开始,否则我可以将其串联。这不是导入的问题。

已经在评论中提到的,存储这样的数据是一个坏主意。但是,您可以通过使用RIGHT函数从这些字符串中获取这些日期:

SELECT RIGHT('20392-208kj48384-2008-01-04', 10) 

输出:

2008-01-04

根据您使用的sqlserver版本,您可以使用string_split,以compatibility_level130。您还可以构建自己的用户定义的函数以拆分字段的内容并在您时对其进行操作。需要,您可以在此线程中找到一些拆分功能的有用示例:

t-sql?

等效的拆分函数

假设我正确并且日期零件始终在字符串的右侧,您只需使用RIGHTCAST即可获取日期(再次假设日期是表示为yyyy-mm-dd(:

SELECT CAST(RIGHT(YourColumn, 10) As Date)
FROM YourTable

但是,Panagiotis在他的评论中是正确的 - 您不应该存储这样的数据。数据库中的每一列只能容纳一个数据点,无论是字符串,编号还是日期。

update 遵循您的评论和更新的问题:

SELECT LEFT(YourColumn, LEN(YourColumn) - 10) + REPLACE(RIGHT(YourColumn, 10), '-', '')
FROM YourTable

将返回所需的结果。

最新更新