如何摆脱..替换(替换(替换(替换(替换)(...?

时间:2008-12-03 23:15:05

标签: sql-server sql-server-2005

我正在选择具有滥用状态列的旧数据库上的数据。状态列中包含多条信息。价值观就像'新联系YYYY','在线YYYY','更新YYYY','撤回YYYY'等等。你可能已经猜到了,YYYY代表了我需要的那一年。

过去我做过类似的事情

Rtrim( ltrim( Replace(Replace(Replace(Replace(Replace( …

基本上,用空字符串替换所有文本值,所以唯一仍然存在的是年份。我仍然可以做到这一点,但我认为这很荒谬,而且必须有更好的方法。

有人知道更好的方法吗?

3 个答案:

答案 0 :(得分:5)

如果您只想从字符串中提取四位数年份,可以使用PATINDEX

SELECT SUBSTRING(FieldName, PATINDEX('%[0-9][0-9][0-9][0-9]%', FieldName), 4)
FROM TableName

答案 1 :(得分:1)

如果年份总是最后4:

SELECT right(FieldName,4) from table

答案 2 :(得分:1)

给出的所有答案都可以解决您的问题,但正确的答案是更好地规范您的数据库。如果您需要将年份作为单独的项目,则应将其存储在单独的列中。

其他任何东西都只是从疣中去除毛发,正如我亲爱的老祖母曾经说过的那样(她从来没有真正说过,我只是想到了它,它听起来很酷 - 一定是为什么我没有得到多少: - 。)