2017-05-30 4 views
-2

SQL Serverで次のように達成するにはどうすればよいですか?SQL Serverで右側のハイフンのみを連結します。

データは次のようになります。ハイフンはONLY最後の日付のために消えてしまうようにするため

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

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

が、それは次のようになりたいです。

+0

人々が持っている[すでにansered](https://stackoverflow.com/questions/44257621/how-to-take-apart-で終わりますinformation-between-hyphens-in-sql-server)この質問をし、そのようなスキーマを使用すべきではないと説明しました。あなたはちょうど別の理由を見つけました。 –

+0

なぜ3つの別々のフィールドを使用しないのですか?各SELECTで値を解析する場合は、問題を一度解決してみてください。 –

+4

[SQL Serverのハイフン間で情報を分離する方法](https://stackoverflow.com/questions/44257621/how-to-take-apart-information-between-hyphens-in-sql-server) – Jayvee

答えて

0

LEFT,RIGHTおよびREPLACE文字列関数の組み合わせを使用します。

クエリ

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

あなたにもupdate声明のためにそれを使用することができます。

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

Find a demo hereそして、すべての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 
関連する問題