我有一个sql表,其create sql显示如下:
++++++++++++++++++++++++++++++++++++++++++++++++++++
USE [TestDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Test](
[LogTime] [nvarchar](50) NULL,
[EventTime] [nvarchar](50) NULL,
[value] [nvarchar](50) NULL,
) ON [PRIMARY]
GO
// +++++++++++++++++++++++++++++++++++++++++++++
但是,当我从表中选择数据时,这就是值。
LogTime EventTime value
--------------------------------------------------------------------
2010-11-26 12:10:31.907000000 634263264000000000 1.145604E-10
2010-11-26 12:10:31.907000000 634263264000000000 1.373898E-9
2010-11-26 12:10:31.907000000 634263264000000000 -2.3787419E-10
为什么Eventtime不是日期格式?
另外,我需要根据日期来从表中选择一些东西,例如获取其事件时间在“2010-10-12 12:00:00”和“2010-10-12 17:00:00”之间的dat ,那么如何构建sql单词?
BWT,我无法改变表的结构,我只需要从db读取数据,永远不要写。**
更新:
**
其中一种sql日期格式为:
YYYY-MM-DD HH:MI:SS.MMM(24h) ODBC Canonical (with milliseconds) SELECT CONVERT(VARCHAR(23), GETDATE(), 121) 1972-02-19 06:35:24.489
但为什么我桌子上的日期毫秒数是9?
像:
1972-02-19 06:35:24。 489
我的数据:2010-11-26 12:10:31。 907000000
我想删除毫秒,那么如何在sql word中转换它?
答案 0 :(得分:0)
如果可以,请将eventTime更改为datetime数据类型而不是varchar
答案 1 :(得分:0)
根据您为EventTime
显示的当前值,我认为您需要向负责填充此表的任何人(因为您已表明它不是您的代码)进行澄清,数据的格式是什么在EventTime
栏中。
目前,我不知道任何特定的SQL日期时间格式可以将此信息表示为您能够处理所需WHERE条件的日期。
List of common SQL Date formats
此外,我建议如果可能的话,发布负责填充Test
表的代码,因为这可能会给EventTime
列中的数据(及其格式)提供一些指示。
编辑:根据评论,数据似乎存储在数据库中的正确日期(尽管是字符串格式)。如果是这种情况,则以下情况应该有效。
注意:121是包含毫秒的格式。如果您的日期不需要毫秒
,您也可以选择使用120SELECT LogTime, CONVERT(DateTime, eventTime, 121), value
FROM Test
WHERE CONVERT(DateTime, eventTime, 121) BETWEEN
CONVERT(DateTime, '2010-10-12 12:00:00', 121) AND
CONVERT(DateTime, '2010-10-12 17:00:00', 121)
注意:您可以通过仅执行一次并将其存储在datetime变量中来避免2个硬编码值(可能是params)上每行的转换。 此外,根据definition,BETWEEN包含两个边界。