SQL字符串查找。这很有效,但似乎不是最好的做法

时间:2016-06-06 16:47:11

标签: sql sql-server tsql substring

使用SSMS 2014

我在特定列中的数据库中有数据。平均数据行看起来像这样:

(5:30) 3-J.WINSTON PASS INCOMPLETE DEEP LEFT TO 13-M.EVANS (23-R.ALFORD).

我的任务是检索该行中的第一个播放器,在这种情况下,我正在检索J.Winston。

我用它来检索和更新名称的列。它完全按照需要工作。但它的一些东西告诉我这个构造很差。有关改善的提示吗?

UPDATE nfl.dbo.Temp_NFL2015
Set Player_Name = SUBSTRING(description,LEN(Left(description,Patindex('%-%',description)))+1,CHARINDEX(' ',description,LEN(Left(description,Patindex('%-%',description))))-1-LEN(Left(description,PATINDEX('%-%', description))))
from NFL.dbo.Temp_NFL2015

1 个答案:

答案 0 :(得分:1)

当您提取数据或进行研究时,数据的规范化将有助于简化操作。

考虑你的例子:

(5:30) 3-J.WINSTON PASS INCOMPLETE DEEP LEFT TO 13-M.EVANS (23-R.ALFORD).

语法(大致)适用于:

(Game Time) (Source Player) (Action) (Target Player) ((Other Involved Players))

这表示基表操作具有以下结构:

ActionID (identity to mark discrete actions)
GameTime
SourcePlayer
Action
TargetPlayer

为了包括其他参与的玩家,我们将其分成一个单独的表格, Action_InvolvedPlayers:

InvolvedActionID (referent to Actions.ActionID)
InvolvedPlayer

考虑要点:

  • 您的数据集可能包含多个游戏,因此请考虑一种明确的方式来说明这个游戏是否已发生此行动'
  • 将玩家数据存储在另一个表格中,并在操作表格中指定参考值可能是有意义的。