在SQL Server 2008中将NVARCHAR转换为DATETIME

时间:2013-10-07 07:14:27

标签: 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

6 个答案:

答案 0 :(得分:5)

DECLARE @chr nvarchar(50) = (SELECT CONVERT(nvarchar(50), GETDATE(), 103))

SELECT @chr chars, CONVERT(date, @chr, 103) date_again

答案 1 :(得分:1)

alter table your_table
alter column LoginDate datetime;

SQLFiddle demo

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

|                     YOUR_DT |             SQL2008 |
|-----------------------------|---------------------|
|         2013-08-29 13:55:48 | 29-08-2013 13:55:48 |
|    2013-08-29 13:55:48 blah |              (null) |
| 2013-08-29 13:55:48 rubbish |              (null) |

SELECT
  [Your_Dt]
, convert(varchar, ca1.dt_converted ,105) + ' ' + convert(varchar, ca1.dt_converted ,8) AS sql2008
FROM your_table
CROSS apply ( SELECT CASE WHEN isdate([Your_Dt]) = 1
                        THEN convert(datetime,[Your_Dt])
                        ELSE NULL
                     END
            ) AS ca1 (dt_converted)
;

注意:

您还可以介绍左([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 | 

答案 4 :(得分:0)

你究竟不想做什么?要更改列的数据类型,您可以简单地使用alter命令作为

  

ALTER TABLE table_name ALTER COLUMN LoginDate DateTime;

但请记住,此列中只应有效日期,但数据类型为nvarchar。

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

  

CONVERT(DATA_TYPE(长度),表达,风格)

例如:

  

SELECT CONVERT(DateTime,loginDate,6)

这将于2007年8月13日返回。有关CONVERT功能的详细信息,您可以访问,

http://www.w3schools.com/sql/func_convert.asp

请记住,始终将DateTime数据类型用于DateTime列。

谢谢

答案 5 :(得分:0)

这个怎么样

--// 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'