我看到我的日期以这种格式存储在数据库中(datetime数据类型)2011-01-14 10:15:41.787,即YYYY-MM-DD方式。如何以YYYY-DD-MM格式创建默认存储。我是否需要为所有DBS设置它,或者我可以为单个DB设置它以及如何设置?
答案 0 :(得分:4)
我有datetime数据类型的列,现在它保存为 2011-01-14 10:15:41.787,我的问题是如何设置db来存储它 2011-14-01 10:15:41.787
这就是混乱的症结所在。仅仅因为SQL Server Management Studio 显示该格式的日期时间列并不意味着它存储为AS TEXT YYYY-MM-DD hh:mm:ss.zzz。它存储为二进制文件,如0000101000001010 ..
您的日期作为一系列字节(实际位)存储在SQL Server中,这些字节组成一些数字值,该值是1900-01-01的偏移量。日期没有固有的格式。您所指的是SSMS默认将[display] datetime列显示为YYYY-MM-DD hh:mm:ss.zzz。如果您使用前端编程工具,除非您要求另一个,否则也可能会施加默认的[显示]格式。
绝对没有办法让SSMS通过选项或配置以另一种格式显示日期时间数据。如果必须,则必须更新SQL查询以将datetime列转换为包含特定格式的TEXTual等效项的VARCHAR列。这在SSMS中可能很有用,但在用作前端GUI / Web应用程序的数据源时会很糟糕 - 因为这些值不是日期时间,不能用于区间计算,绘图,绑定到日期控件等。
请参阅此示例,将时间(getdate())显示为YYYY-DD-MM,这是一种非常不寻常的格式。请注意,日期字段/变量必须使用两次:
select stuff(convert(char(7), getdate(), 120), 5, 0, '-' + convert(char(2), getdate(), 3))
答案 1 :(得分:2)
DATETIME在内部存储为两个4字节整数,因此首先您会看到UI的格式化表示 - 它实际上并不是以特定的日期/时间格式存储的。 例如如果您只插入“2010-01-01”之类的日期,那么它仍会保留时间元素:2010-01-01 00:00:00.000
如果您只对DATE部分感兴趣,那么您可以在前端代码中或通过查询格式化DATETIME输出:
e.g。
SELECT CONVERT(VARCHAR(8), GETDATE(), 121)
因此,即使您插入的DATE包含时间,返回时也会被忽略。您还可以确保只在没有指定时间的情况下插入日期 - 您需要在执行INSERT的任何代码中处理该日期。例如来自.NET,而不是传入DateTime.Now
,你可以传递DateTime.Now.Date
。
在SQL Server 2008中,有一个DATE数据类型,它只存储一个DATE(没有时间),这正是你在这种情况下所需要的。