2013-03-19 65 views
-1

当我使用INSERT INTO table varchar_field Values (GETDATE()),数据库存储的值:如何将GETDATE()存储在varchar中,但作为日期时间?

Mar 19 2013 12:55PM 

但我想被存储为:

2013-03-19 12:55:24.577 

这又如何实现呢?

+7

你为什么要储存一个日期作为'varchar'?为什么不改变列上的数据类型?你的问题将得到解决。 – Taryn 2013-03-19 17:04:45

+0

这是一个将各种参数映射到值的配置表。在这种情况下,我将存储日期作为值。 – 2013-03-19 17:38:45

+0

@AlanMarshall希望你没有存储'VARBINARY' ...'SELECT CONVERT(varchar(10),0x6869,121)' – swasheck 2013-03-19 17:42:56

回答

3

MSDN

select CONVERT(varchar(50),getdate(),121) 

INSERT INTO table varchar_field Values (CONVERT(varchar(50),getdate(),121)) 

由于Lamak指出的那样,我错误地离开了指定VARCHAR

+0

谢谢。我在DATETIME上查看了MSDN页面,看到了对CONVERT的引用,但由于某种原因,没有考虑传递一个参数,而不是时间的例子。 – 2013-03-19 17:37:28

+4

请始终使用带有长度的'VARCHAR'(如'VARCHAR(10)'),不要只使用'VARCHAR',否则可能会得到不正确的结果。从@AaronBertrand看到这个http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kclack-declaring-varchar-without-length.aspx – Lamak 2013-03-19 17:42:47

+2

你*仍然*遗漏了指定'varchar'的长度... – 2013-03-19 17:48:55

9

请停止存储您的日期值作为varchar,使用正确的数据类型的长度。

您的最佳解决方案是将您的列更改为正确的数据类型。

但是,如果你需要的getdate()转换,你可以使用:

INSERT INTO table varchar_field 
select convert(varchar(50), GETDATE(), 121) 

这里是一个complete list of all data conversions for SQL Server

0

步骤1

alter yourtable drop column varchar_field 

步骤2

alter yourtable add column datetimefield datetime default getdate() 

步骤3

select convert(varchar(50), datetimefield, 121) 
from yourtable 

这种方法允许你改变格式如果需要的话,或做日期math.`

相关问题