2017-05-30 39 views
-2

如何在SQL Server中实现以下内容?在SQL Server中只连接右侧连字符

的数据是这样的:

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 

这样的连字符会消失,只为最终日期。

+0

人有[已ansered(https://stackoverflow.com/questions/44257621/how-to-take-apart-结束信息之间的连字符在SQL服务器)这个问题,并解释说,你不应该使用这样的模式。你刚刚找到另一个原因。 –

+0

为什么你不使用三个单独的领域?如果您要用每个SELECT解析值,为什么不一劳永逸地解决问题? –

+4

[如何在SQL Server连字符之间拆分信息](https://stackoverflow.com/questions/44257621/how-to-take-apart-information-between-hyphens-in-sql-server) – Jayvee

回答

0

使用组合LEFT,RIGHTREPLACE字符串函数。

查询

select *, 
left([key], len([key]) - 10) + replace(right([key], 10), '-', '') 
from your_table_name; 

你可以用它为update声明为好。

Find a demo here

update [tblFiles] 
set [key] = left([key], len([key]) - 10) + replace(right([key], 10), '-', '') 
from [your_table_name]; 

而且所有key列的值应该是相同的方式。
我的意思是,应该.........yyyy-mm-dd

0
;With cte([Filename],[Yes/No],[Key]) 
AS 
(
SELECT 'Abidabo','Yes' ,'92873-987dsfkj80-2002-04-11' UNION ALL 
SELECT 'Bibiboo','No' ,'20392-208kj48384-2008-01-04' 
) 
SELECT [Filename] 
    ,[Yes/No] 
    ,CONCAT(SUBSTRING([Key],0,LEN([Key])-9) 
    ,REPLACE(SUBSTRING([Key], LEN(SUBSTRING([Key], 0, LEN([Key]) - 8)), LEN([Key])), '-', '')) AS ExpectedKey 
FROM cte 

输出

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