SQL Server将varchar转换为datetime

时间:2015-11-24 13:16:08

标签: sql-server date datetime

我在SQL Server中遇到了将varchar转换为datetime的问题。我想转换/更新表格中的整个列[datelog]

[dd.mm.yyyy hh:mm:ss]` to `[yyyy-mm-dd hh:mm:ss]

3 个答案:

答案 0 :(得分:1)

棘手的解决方案,

DECLARE @inputDate AS VARCHAR(20)='21.11.2015 06:59:00' -- [dd.mm.yyyy hh:mm:ss]
SET @inputDate = REPLACE(@inputDate ,'.' ,'/')
SELECT CONVERT(VARCHAR(24) ,CONVERT(DATETIME ,@inputDate ,103) ,121) OutputDate -- [yyyy-mm-dd hh:mm:ss]

您还需要根据表格列进行更改。

答案 1 :(得分:1)

在SQL Server 2012+中,您可以使用PARSETRY_PARSE根据特定文化来解析文本值。

假设您的文字遵循德国文化(' de-DE'),您可以将其解析为日期时间:

select PARSE('24.11.2015 13:10:55' as datetime using 'de-DE')

例如:

select PARSE(datelog as datetime using 'de-DE')

但真正的解决方案是使用正确的字段类型,即datetime。它几乎可以保证,某个人会在某个地方输入错误格式的文本,或者尝试使用错误的文化来转换文本。

另一方面,日期类型没有格式,它们只是二进制值。使用它们更快,更安全,更容易。

答案 2 :(得分:0)

临时表,其中一列为varchar

create table #temp3 (someDate varchar (30))
insert into #temp3 values ('23.03.1989 15:23:43')

使用concat,substring和right

的组合
select concat
(
SUBSTRING(someDate,7,4),'-', SUBSTRING(someDate,4,2),'-',SUBSTRING(someDate,1,2), ' ', right(someDate, 8)
)
from #temp3

给出:1989-03-23 15:23:43