我有一个VB6应用程序,我将一组日期插入SQL-SERVER。每次插入一个值时,它都会插入为 1978-12-12 00:00:00.000 。是否可以在INSERT语句中指定您希望如何格式化日期? VB6似乎不识别CONVERT。当我将它加载到像这样的MSHFlexGrid时,我之前做过CONVERT日期:
Convert(varchar,tblClient.DOB, 101)
但我在选择声明中这样做了。 SQL是否允许我以MM / DD / YYYY格式插入一个值,因为我稍后需要该格式。 我需要格式化的原因是因为我将SQL-SERVER2008中的所有表连接到Access以生成报告。所以我需要在SQL-SERVER2008中正确格式化它,因为它动态连接到Access。
答案 0 :(得分:2)
理想情况下,数据库中列的数据类型设置为Date或DateTime。基本上,如果您想存储日期,请使用日期日期类型。
话虽如此,在VB6中,您通常必须(至少暂时)将日期存储为字符串,因此几乎总会在某处发生字符串到目前为止的转换。
SQL允许我以MM / DD / YYYY格式插入值
是。但你不应该这样做。相反,您应该插入格式为“YYYYMMDD”的日期。请注意,没有分隔符。 mm / dd / yyyy的问题在于它可能会被意外地解释为错误的日期。例如,如果您居住在英格兰,则2015年2月1日将被解释为2015年2月1日,如果您居住在美国,则将被解释为2015年1月2日。但是,SQL Server将始终解释20150102和2015年1月2日。
一旦您以数据库中所需的方式存储数据(作为实际日期数据类型),您实际上应该将其作为日期返回到前端(Access或VB6)。在前端,您应该使用format命令来显示日期。 format命令将使用计算机的区域设置以用户希望的方式显示日期。
例如:
txtDateOfBirth.Text = Format(rs.Fields.Item("DOB").value, "Short Date")
以这种方式做事......你应该永远不会遇到日期问题。
答案 1 :(得分:1)
最好的方法是不在数据库服务器中存储格式化日期。
通过使用格式化数据并将其用作报告输入的视图,您可以获得所需的一种方式:
CREATE VIEW myreport
SELECT replace(convert(NVARCHAR, mydate, 106), ' ', '/') from mytable
但我建议在应用程序级别设置日期格式。
答案 2 :(得分:0)
您可以使用VB6s格式函数在将其插入SQL之前准备日期。这是一个例子(在VBA中测试)。
Format(Now(), "YYYY-MM-DD")