0

我的 SQL Server 表中有MeasureDateTime( nvarchar(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

有人知道怎么做吗?甚至可能吗?

4

3 回答 3

2

尝试

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

将 varchar 列转换为datetime格式。

SUBSTRING(MeasureDateTime,4,100)删除日期字符串的工作日部分,并且CONVERT()带有格式的调用101将接受美国类型的日期格式。

选择可能看起来像

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

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

convert(datetime,substring(stuff(dt,11,0,right(dt,5)),4,21),101)

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

于 2013-09-10T20:35:50.533 回答
1

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

WHERE DATEDIFF(Month, CAST(RIGHT(MeasureDateTime, LEN(MeasureDateTime) - 4) as datetime), GETDATE()) <= 6
于 2013-09-10T20:41:36.707 回答
0

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

于 2013-09-11T04:37:11.090 回答