6

在我的桌子上

LoginDate  
2013-08-29 13:55:48  

loginDate列的数据类型是nvarchar(150)

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

预期结果。

LoginDate  
29-08-2013 13:55:48
4

6 回答 6

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

SELECT @chr chars, CONVERT(date, @chr, 103) date_again
于 2016-01-05T12:50:08.150 回答
3

由于您的数据是 nvarchar ,因此无法保证它将转换为日期时间(因为它可能包含无效的日期/时间信息) - 因此处理此问题的一种方法是使用我将在交叉应用中使用的 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)
;

笔记:

您还可以引入 left([Your_Dt],19) 以仅从 '2013-08-29 13:55:48 rubbish' 中获取类似 '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 | 
于 2013-10-07T10:42:16.367 回答
1
SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable

Output
-------------------
29-08-2013 13:55:48
于 2013-10-07T08:29:08.643 回答
1
alter table your_table
alter column LoginDate datetime;

SQLFiddle 演示

于 2013-10-07T07:19:44.987 回答
0

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

ALTER TABLE table_name ALTER COLUMN LoginDate DateTime;

但请记住,只有在此列中才应该有有效的日期,但数据类型是 nvarchar。

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

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

例如:

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

这将返回 29 AUG 13。有关 CONVERT 函数的详细信息,您可以访问,

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

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

谢谢你

于 2013-10-07T07:37:49.597 回答
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'

于 2016-01-26T12:49:05.247 回答