Sql server 2008 操纵字符串以提取日期时间
我的SQL Server表中有Sql server 2008 操纵字符串以提取日期时间,sql-server-2008,Sql Server 2008,我的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.0
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
类型
有人知道怎么做吗?甚至可能吗?试试看
CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101)
将varchar列转换为datetime
格式
SUBSTRING(MeasureDateTime,4100)
删除日期字符串的工作日部分,并且CONVERT()
使用格式101
调用将接受US类型的日期格式
select可能看起来像
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)
这种方法依赖于相等的字符串长度。我不知道这是否是一个给定的 试试看
CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101)
将varchar列转换为datetime
格式
SUBSTRING(MeasureDateTime,4100)
删除日期字符串的工作日部分,并且CONVERT()
使用格式101
调用将接受US类型的日期格式
select可能看起来像
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)
这种方法依赖于相等的字符串长度。我不知道这是否是一个给定的 这有点复杂,但可能有效:
WHERE DATEDIFF(Month, CAST(RIGHT(MeasureDateTime, LEN(MeasureDateTime) - 4) as datetime), GETDATE()) <= 6
其中DATEDIFF(Month,CAST(RIGHT(MeasureDateTime,LEN(MeasureDateTime)-4)作为datetime),GETDATE())这有点复杂,但可能有效:
WHERE DATEDIFF(Month, CAST(RIGHT(MeasureDateTime, LEN(MeasureDateTime) - 4) as datetime), GETDATE()) <= 6
其中DATEDIFF(Month,CAST(RIGHT(MeasureDateTime,LEN(MeasureDateTime)-4)作为datetime),GETDATE())在插入时尝试使用此表的触发器。尝试@cars10提供的解决方案获取日期并将其存储在datetime
字段中。始终将日期时间字段保留为datetime
,而不是varchar
字段。稍后,您必须根据日期检索记录,此datetime
字段将被证明是有用的。在插入时尝试使用此表的触发器。尝试@cars10提供的解决方案获取日期并将其存储在datetime
字段中。始终将日期时间字段保留为datetime
,而不是varchar
字段。稍后,您必须根据日期检索记录,这个datetime
字段将被证明是有用的。为什么要将datetime存储为字符串?如果您可以控制表,并且可以更改表,您应该考虑将此列更改为DATETIME。我猜它是从某个导入源来的,而不是SQL理解的标准日期格式——因此VARARAR存储——您不应该将日期存储为字符串——那样您只是自找麻烦。使用DATE
或DATETIME
数据类型!为什么要将日期时间存储为字符串?如果您可以控制表,并且可以更改表,您应该考虑将此列更改为DATETIME。我猜它是从某个导入源来的,而不是SQL理解的标准日期格式——因此VARARAR存储——您不应该将日期存储为字符串——那样您只是自找麻烦。使用DATE
或DATETIME
数据类型!这不管用,但是一个好的想法。。。我会努力的,所以我更。。。错误消息:从字符串转换日期和/或时间时,转换失败。这不起作用,但是一个好主意。。。我会努力的,所以我更。。。错误消息:从字符串转换日期和/或时间时,转换失败。