在SQL Server 2008中将NVARCHAR转换为日期时间

在SQL Server 2008中将NVARCHAR转换为日期时间,sql,datetime,sql-server-2008-r2,nvarchar,Sql,Datetime,Sql Server 2008 R2,Nvarchar,在我的桌子上 LoginDate 2013-08-29 13:55:48 loginDate列的数据类型是nvarchar(150) 我想使用SQL命令将logindate列转换为日期时间格式 预期结果 LoginDate 29-08-2013 13:55:48 你到底不想做什么?。要更改列的数据类型,只需使用alter命令即可 ALTER TABLE TABLE_name ALTER COLUMN LoginDate DateTime 但请记住,此列中应仅包含有效日期,但数据类

在我的桌子上

LoginDate  
2013-08-29 13:55:48  
loginDate
列的数据类型是
nvarchar(150)

我想使用SQL命令将
logindate
列转换为日期时间格式

预期结果

LoginDate  
29-08-2013 13:55:48

你到底不想做什么?。要更改列的数据类型,只需使用alter命令即可

ALTER TABLE TABLE_name ALTER COLUMN LoginDate DateTime

但请记住,此列中应仅包含有效日期,但数据类型为nvarchar

如果在获取数据时不想转换数据类型,则可以将转换函数用作

转换(数据类型(长度)、表达式、样式)

例如:

选择转换(日期时间,登录日期,6)

这将于8月29日至13日返回。有关转换函数的详细信息,请访问:

请记住,DateTime列始终使用DataTime数据类型


谢谢

因为您的数据是nvarchar,所以不能保证它会转换为日期时间(因为它可能包含无效的日期/时间信息)-所以处理这个问题的方法是使用ISDATE,我会在交叉应用程序中使用它。(交叉应用结果是可重用的,因此输出格式更容易使用。)

SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable

Output
-------------------
29-08-2013 13:55:48
注:

您还可以引入left([Your_Dt],19),从'2013-08-29 13:55:48'中仅获取类似'2013-08-29 13:55:48'的字符串

对于特定的输出,我认为您需要2个sql 2008日期样式(105和8) 添加sql2012以进行比较

declare @your_dt as datetime2
set @your_dt = '2013-08-29 13:55:48'

select
  FORMAT(@your_dt, 'dd-MM-yyyy H:m:s') as sql2012
, convert(varchar, @your_dt ,105) + ' ' + convert(varchar, @your_dt ,8) as sql2008

|             SQL2012 |             SQL2008 |
|---------------------|---------------------|
| 29-08-2013 13:55:48 | 29-08-2013 13:55:48 | 
这个怎么样

--// Convert NVARCHAR to DATETIME
DECLARE @date DATETIME = (SELECT convert(DATETIME, '2013-08-29 13:55:48', 120))
--// Convert DATETIME to custom NVARCHAR FORMAT
SELECT 
RIGHT('00'+ CAST(DAY(@date) AS NVARCHAR),2) + '-' +
RIGHT('00'+ CAST(MONTH(@date) AS NVARCHAR),2) + '-' + 
CAST(YEAR(@date) AS NVARCHAR) + ' ' + 
CAST(CONVERT(TIME,@date) AS NVARCHAR)

结果:“29-08-2013 13:55:48.0000000”

始终尝试使用datetime字段作为日期时间值请接受答案,因为答案确实解决了您的问题,或者对找到解决方案最有帮助(注意:您可以再次单击以撤消)。接受答案表示问题已解决,这在寻找解决方案或寻找要解决的问题时节省了其他人的时间。我无权更改列。我无权更改列。当你可以使用转换函数时,我想格式化输出。在上面的问题中,你可以使用3或113而不是上面示例中的6作为你所需的日期格式。不正确。OP询问如何将NVARCHAR转换为日期值,而您正在演示如何将日期转换为NVARCHAR。这个答案需要一些说明。本质上,答案是使用函数“CONVERT(date)”
declare @your_dt as datetime2
set @your_dt = '2013-08-29 13:55:48'

select
  FORMAT(@your_dt, 'dd-MM-yyyy H:m:s') as sql2012
, convert(varchar, @your_dt ,105) + ' ' + convert(varchar, @your_dt ,8) as sql2008

|             SQL2012 |             SQL2008 |
|---------------------|---------------------|
| 29-08-2013 13:55:48 | 29-08-2013 13:55:48 | 
DECLARE @chr nvarchar(50) = (SELECT CONVERT(nvarchar(50), GETDATE(), 103))

SELECT @chr chars, CONVERT(date, @chr, 103) date_again
--// Convert NVARCHAR to DATETIME
DECLARE @date DATETIME = (SELECT convert(DATETIME, '2013-08-29 13:55:48', 120))
--// Convert DATETIME to custom NVARCHAR FORMAT
SELECT 
RIGHT('00'+ CAST(DAY(@date) AS NVARCHAR),2) + '-' +
RIGHT('00'+ CAST(MONTH(@date) AS NVARCHAR),2) + '-' + 
CAST(YEAR(@date) AS NVARCHAR) + ' ' + 
CAST(CONVERT(TIME,@date) AS NVARCHAR)