操纵字符串以提取日期时间

时间:2013-09-10 20:25:56

标签: sql-server-2008

我的SQL Server表中有MeasureDateTimenvarchar(50))列。

我需要

  |measureFilePath   |    MeasureDateTime     |       MeasureName       |
  |  12Nc121         |Thu Jun 19 15:00:05 2011| Annulus 4th RMS (Waves) |
  |  12NB121         |Thu Jul 19 15:38:05 2012| 3.0mm 4th RMS (Waves)   |
  |  12NXc121        |Tue May 15 12:13:02 2012| BC (mm)                 |
  |  12NA121         |Tue May 15 12:13:02 2012| CT (mm)                 |
  |  12Nc111         |Tue May 15 12:13:02 2012| Reference Angle (deg.)  |
  |  12Nc231         |Wed May 15 12:03:02 2013| Temperature (C)         |

我希望使用MeasureDateTime列获取最近6个月的数据。

但问题是MeasureDateTime属于nvarchar类型。

任何人都知道如何做到这一点?它甚至可能吗?

3 个答案:

答案 0 :(得分:2)

尝试

CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101)

将varchar列转换为datetime格式。

SUBSTRING(MeasureDateTime,4,100)删除日期字符串的工作日部分,格式CONVERT()的{​​{1}}来电将接受美国日期格式。

选择可能看起来像

101

之前我忽略了插入的时间信息。这是对日期转换的另一种尝试:

SELECT * FROM table WHERE DATEADD(month, 6, CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101)) > getdate()

这种方法依赖于相等的字符串长度。我不确定这是否是给定的。

答案 1 :(得分:1)

这有点令人费解但可能有效:

WHERE DATEDIFF(Month, CAST(RIGHT(MeasureDateTime, LEN(MeasureDateTime) - 4) as datetime), GETDATE()) <= 6

答案 2 :(得分:0)

插入时尝试使用此表的触发器。尝试@ cars10提供的解决方案来获取日期并将其存储在datetime字段中。始终将日期时间字段保留为datetime而不是varchar字段。稍后你我必须根据日期检索记录,这个datetime字段将被证明是有用的。