在我的桌子上
LoginDate
2013-08-29 13:55:48
该loginDate
列的数据类型是nvarchar(150)
我想logindate
使用 SQL 命令将列转换为日期时间格式
预期结果。
LoginDate
29-08-2013 13:55:48
在我的桌子上
LoginDate
2013-08-29 13:55:48
该loginDate
列的数据类型是nvarchar(150)
我想logindate
使用 SQL 命令将列转换为日期时间格式
预期结果。
LoginDate
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
由于您的数据是 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 |
SELECT CONVERT(NVARCHAR, LoginDate, 105)+' '+CONVERT(NVARCHAR, LoginDate, 108) AS LoginDate FROM YourTable
Output
-------------------
29-08-2013 13:55:48
alter table your_table
alter column LoginDate datetime;
你到底不想做什么?要更改列的数据类型,您可以简单地使用 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 数据类型。
谢谢你
那这个呢
--// 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'