我的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
类型。
任何人都知道如何做到这一点?它甚至可能吗?
答案 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
字段将被证明是有用的。