我的项目要求我使用VB(5或6)* 在SQL Server数据库中存储日期。 SQL datetime类型包括我不想要的时间。我也知道VB的日期表示并不反映SQL Server的表示。
那么,如何在VB数据库中存储以VB日期类型保存的日期,例如该日期午夜的日期时间,例如?
编辑:我需要使用日期来进一步选择行,所以我无法在阅读时截断它。
*我知道,你是我,你不会从这里开始。但是考虑到这些限制,任何VB6 / MS SQL就会出现问题吗?
答案 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'}
。