代码之家  ›  专栏  ›  技术社区  ›  Phil H

如何从VB在MS SQL中仅存储一个日期?

  •  0
  • Phil H  · 技术社区  · 17 年前

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

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

    编辑:我需要使用日期来选择行后面的行,所以我不能在读取时直接截断它。

    *我知道,我知道你是我,你不会从这里开始。但是考虑到这些限制,有没有VB6/MSSQL的朋友?

    6 回复  |  直到 17 年前
        1
  •  3
  •   Mitch Wheat    17 年前

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

        2
  •  2
  •   Andy Jones    17 年前

    SQLServer2008已经发布 new date and time data types

        3
  •  0
  •   Joel Coehoorn    17 年前

    使用DateTime列并在表示级别截断时间。

        4
  •  0
  •   Garry Shutler    17 年前

    尝试按如下方式插入和更新日期:

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

        5
  •  0
  •   onedaywhen    17 年前

    在VB中,可以使用Date()函数返回当前日期,而不包含时间元素。

    如果将ADO参数对象与命令对象一起使用,则OLE DB提供程序应处理VB日期类型到SQL Server日期时间值的转换。

    在SQL Server(SQL 2008之前的日期类型)中,您应该在列上创建一个检查约束,以确保无法添加带有时间元素的日期(注意,我对日期时间文本使用了明确的语言“安全”格式),例如。

    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')));
    
        6
  •  0
  •   Will Rickards    17 年前

    我会用 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'}