2015-02-07 65 views
1

我想这nvarchar列于日期时间格式转换:找不到SQL Server中的日期样式格式2012

 "29/12/14 07:46:20 PM" 

这种风格是好的,但一直没有时间:

 SELECT CONVERT(datetime, nvarcharDateColumn, 3) AS [DD/MM/YY] 

如何我可以转换它并保留所有的日期部分(日期+时间)?

+0

你正在做的相反。 'CONVERT(VARCHAR(8),GETDATE(),3)'将DATETIME转换为'VARCHAR(8)'。你在第一行说你想将'NVARCHAR'转换成'DATETIME'。这是什么? – 2015-02-07 13:36:43

+4

为什么要在SQL中格式化日期?在你的UI层做到这一点。 – DavidG 2015-02-07 13:38:49

+0

@ roryap问题是我无法找到合适的日期样式。我知道你在说什么。这只是一个例子。 – Ariox66 2015-02-07 13:48:01

回答

1

SQL Server中的日期时间数据类型没有“格式”。它本地是一个8字节的二进制值。到nvarchar的字符串转换为datetime,请使用转换与nvarchar列作为第二个参数:

SELECT CONVERT(datetime, nvarcharColumnWithDateAndTime, 3) AS NativeDateTime 
FROM dbo.YourTable; 

注意此查询中显示的日期时间格式是由您使用的应用程序,而不是SQL Server数据库来确定。另外,考虑将表格数据类型更改为datetime以避免数据完整性问题; nvarchar将允许存储无效日期。

+0

他希望转换从'DATETIME'转换为'VARCHAR',而不是相反。 – 2015-02-07 13:56:45

+0

@noryap,最近的评论说它是一个从csv导入的nvarchar列。 – 2015-02-07 13:58:47

+0

@ roryap问题中的第一句话完全相反。 – DavidG 2015-02-07 14:01:35

0

此一有时间,但包括毫秒......它可能是太多了:)

SELECT CONVERT(VARCHAR(30), GETDATE(), 131) 
+0

这输出'18/04/1436 8:55: 53:903AM'。 – 2015-02-07 13:56:12

+0

哦,废话。正在寻找正确的格式,但完全忘记了实际的日期(facepalm) – 2015-02-07 13:58:39

0

这是我想到一个艰巨的任务。这是最好的,我可以拿出:

DECLARE @MyDate DATETIME 
SET @MyDate = GETDATE() 
SELECT CONVERT(VARCHAR(50), @MyDate, 3) + ' ' + CONVERT(VARCHAR(50), CONVERT(TIME, @MyDate), 100)