如何在VB中只存储MS SQL中的日期?

时间:2009-04-06 15:12:20

标签: sql sql-server datetime vb6

我的项目要求我使用VB(5或6)* 在SQL Server数据库中存储日期。 SQL datetime类型包括我不想要的时间。我也知道VB的日期表示并不反映SQL Server的表示。

那么,如何在VB数据库中存储以VB日期类型保存的日期,例如该日期午夜的日期时间,例如?

编辑:我需要使用日期来进一步选择行,所以我无法在阅读时截断它。

*我知道,你是我,你不会从这里开始。但是考虑到这些限制,任何VB6 / MS SQL就会出现问题吗?

6 个答案:

答案 0 :(得分:3)

VB6有一个DateValue()函数,它返回日期/时间值的日期部分,时间部分为“清零”。 (注意:当日期/时间变量的时间部分为“清零”时,时间将被解释为12:00 AM。)

答案 1 :(得分:2)

SQL Server 2008有new date and time data types。如果您不想存储时间组件,则存在“日期”数据类型。

答案 2 :(得分:0)

使用DateTime列,只截断演示级别的时间。

答案 3 :(得分:0)

尝试插入和更新日期,如下所示:

CAST(FLOOR(CAST(@DateTime AS float)) AS datetime)

我们在UDF中有这个,它基本上剥离了日期时间的时间部分。

答案 4 :(得分:0)

在VB中,您可以使用Date()函数返回没有时间元素的当前日期。

如果您使用带有Command对象的ADO Parameter对象,那么OLE DB提供程序应该处理VB Date类型到SQL Server DATETIME值的转换。

在SQL Server(pre SQL 2008 DATE类型)中,您应该在列上创建一个CHECK约束,以确保无法使用time元素添加日期(请注意,我使用了一种明确的语言'safe'格式我的DATETIME文字)例如

ALTER TABLE MyTable ADD
   vb_date DATETIME NOT NULL
   CONSTRAINT vb_date__no_time_element
      CHECK ((vb_date = DATEADD(DAY, DATEDIFF(DAY, '1990-01-01T00:00:00.000', vb_date), '1990-01-01T00:00:00.000')));

答案 5 :(得分:0)

我只想使用DateSerial来创建您需要的日期。你把它传递了一年,一个月和一天,它给你一个午夜时间作为时间。然后,您可以使用它作为参数传递给ADO命令或类似命令。当你阅读它时,它会有午夜,所以这不是问题。我比DateValue更喜欢它,因为没有字符串转换。如果你真的想要你可以创建自己的函数,比如使用DateSerial的DateValue。

Function JustTheDatePlease(ByVal dtSource As Date) As Date

   JustTheDatePlease = DateSerial(Year(dtSource), Month(dtSource), Day(dtSource))

End Function

如果由于某种原因你没有使用参数化查询,并且你真的应该有一个很好的借口,你可以在查询中使用日期的ODBC规范形式。您只需将日期格式设置为{d 'yyyy-mm-dd'},例如{d '2009-04-06'}