2017-09-13 3 views
0

SQL Serverには、最後に生年月日がある場合とない場合がある名前の一覧を持つ列があります。この列は、誕生日ではなく名前のみが表示されることを要求するテンプレートにメールをマージします。SQL Serverにフィールドが存在する場合は、フィールドの末尾を切り捨てます

問題は、すべての行に名前と生年月日の値が含まれていると、終わりから誕生日をトリミングすることができるということです。しかし、最終的に生年月日がない場合、SQLにこれらの行だけを残して終了をトリムしないようにするにはどうすればよいですか?

例:

COLUMN_NAME 
John Doe 01/01/1990 
Jane Smith 31/12/1991 
Bob Fossil 

私の現在のコード:

select ..., left (COLUMN_NAME, len(COLUMN_NAME) - 10) 
FROM... 

これは正しく誕生オフジョン・ドウとジェーン・スミスの日付がかかりますが、私はその後、ボブの化石は空白で終わります(それは10文字です)。

+0

は同じ形式で常に出生の日ですか? – Tanner

+0

はい常に同じdd/mm/yyyy –

答えて

0

単純な正規表現としてPATINDEXを使用して、日付パターンをチェックし、開始インデックスがある場合はそれを取り出して削除することができます。ここで

select 
case 
    when patindex('%[0-3][0-9]/[0-1][0-9]/[0-9][0-9][0-9][0-9]%' , COLUMN_NAME) > 0 
    then substring(COLUMN_NAME, 0, patindex('%[0-3][0-9]/[0-1][0-9]/[0-9][0-9][0-9][0-9]%' , COLUMN_NAME)) 
    else COLUMN_NAME end, 
from Test; 

がthestのためのフィドルを参照してください:http://sqlfiddle.com/#!6/1bb08/6/0

+0

回答を提供するか、コメントを書いてください。 – sagi

+0

これは完璧です。ちょうど私が必要なもの! –