在SQL Server 2008中将NVARCHAR转换为DATETIME

6
在我的表格中
LoginDate  
2013-08-29 13:55:48  

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

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

期望结果:

LoginDate  
29-08-2013 13:55:48

1
始终尝试使用datetime字段来存储日期时间值。 - Nisha
6个回答

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

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

1
这个答案需要进一步澄清。 实质上,答案是使用函数“CONVERT(date”。 - Richard Woolf

3

由于您的数据是nvarchar类型,不能保证它会转换为datetime(因为它可能包含无效的日期/时间信息)- 因此处理这种情况的一种方法是使用ISDATE,我会在cross apply中使用它。(交叉应用结果是可重复使用的,因此更容易实现输出格式。)

|                     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'的字符串。

对于特定的输出,我认为您将需要两个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 | 

1

我没有修改该列的访问权限。 - user2617053

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

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

错误。OP正在询问如何将NVARCHAR 转换为日期值,而您正在展示如何将DATE 转换为 NVARCHAR。 - Richard Woolf

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'


0

你想要做什么?如果要更改列的数据类型,可以简单地使用 ALTER 命令:

ALTER TABLE table_name ALTER COLUMN LoginDate DateTime;

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

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

CONVERT(data_type(length),expression,style)

例如:

SELECT CONVERT(DateTime, loginDate, 6)

这将返回“29 AUG 13”。有关 CONVERT 函数的详细信息,请访问http://www.w3schools.com/sql/func_convert.asp

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

谢谢!


我没有修改该列的访问权限。我想要格式化输出。 - user2617053
然后您可以使用 CONVERT 函数。在上述示例中,您可以使用 3 或 113 替代 6 来获取所需的日期格式。 - Regon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接