我在SQL Server中遇到了将varchar
转换为datetime
的问题。我想转换/更新表格中的整个列[datelog]
:
[dd.mm.yyyy hh:mm:ss]` to `[yyyy-mm-dd hh:mm:ss]
答案 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+中,您可以使用PARSE或TRY_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