[英]SQL Server: change column datatype from datetime2 to nvarchar, convert existing data simultaneously
[英]Change datatype of a column from nvarchar(50) to datetime
我正在尝试将nvarchar(50)格式的列(Scan_Start)转换为datetime格式。 该列包含类似'20190410183452'的值,基本上是yyyymmddhhmmss。 我已经尝试了以下命令,但是它不起作用。
UPDATE TableA SET Scan_Start2= cast((SUBSTRING(Scan_Start,1,4) + '-' + SUBSTRING(Scan_Start,5,2) + '-' +
SUBSTRING(Scan_Start,7,2) + ' ' +
SUBSTRING(Scan_Start,9,2) + ':' +
SUBSTRING(Scan_Start,11,2) + ':' +
SUBSTRING(Scan_Start,13,2)) AS DATETIME)
from GSSC_July_Completed_AP_Test_Date;
此命令引发以下错误。
消息241,级别16,状态1,第7行从字符串转换日期和/或时间时转换失败。
我尝试过的另一个命令:
update TableA set Scan_Start2 = convert(datetime, STUFF(STUFF(STUFF(Scan_Start, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'));
此命令引发以下错误
消息242,级别16,状态3,行16将nvarchar数据类型转换为datetime数据类型导致值超出范围。 该语句已终止。
任何人都可以帮助我。
如果您的字符串始终具有相同的长度和格式,则可以应用以下逻辑,以防万一任何字符串的格式不符合预期,您会看到NULL
:
Declare @String varchar (20) = '20190410183452';
select TRY_CONVERT(datetime, LEFT(@String, 8) ) as ConvertedDate,
(SUBSTRING(@String,9, 2)) as [Hours],
(SUBSTRING(@String,11, 2)) as [Minutes],
(SUBSTRING(@String,13, 2)) as [Seconds],
DATEADD(SECOND,
CAST( (SUBSTRING(@String,13, 2)) AS INT),
DATEADD(MINUTE,
CAST ((SUBSTRING(@String,11, 2)) AS INT),
DATEADD(HOUR,
CAST( (SUBSTRING(@String,9, 2)) AS INT),
TRY_CONVERT(datetime, LEFT(@String, 8) )
)
)
) as CovertedDatetime
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.