在我的表格中
LoginDate
2013-08-29 13:55:48
loginDate
列的数据类型为nvarchar(150)
我想使用SQL命令
将logindate
列转换为日期时间格式
预期结果。
LoginDate
29-08-2013 13:55:48
答案 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;
答案 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'