T10=] 连接字符串并将其转换为日期时间
T-SQL concatenate & convert string to date time
我有一个 table(再次由生物识别软件实现),它将日期和时间作为字符串存储在不同的列中。
日期列存储日期,例如 20160128
for January 18 2016
,时间列存储时间,例如 220747
(10:07:47 PM
).
如何连接两个字符串并转换为有效的日期时间值?
我已经提到了这里提出的其他几个问题,发现其中很多只涉及日期部分,缺少时间因素
以下是一个示例脚本,它从存储在 VARCHAR
列中的日期和时间进行转换。如果格式为 YYYYMMDD[ hh:mm:ss[.mmm]]
(ISO 8601 格式),则可以转换为 DATETIME
:
DECLARE @dtpart VARCHAR(16) = '20160128';
DECLARE @timepart VARCHAR(16) = '220747';
SELECT
CAST(@dtpart+' '+LEFT(@timepart,LEN(@timepart)-4)+':'+SUBSTRING(@timepart,LEN(@timepart)-3,2)+':'+RIGHT(@timepart,2) AS DATETIME)
如果您的 date/time 字符串存储在 CHAR
列中,则由于字符串用空格填充,因此会涉及更多。这需要使用 RTRIM
:
修剪空格
DECLARE @dtpart CHAR(16) = '20160128';
DECLARE @timepart CHAR(16) = '20747';
SELECT CAST(RTRIM(@dtpart) + ' ' + LEFT(RTRIM(@timepart),LEN(RTRIM(@timepart))-4)+ ':' + SUBSTRING(RTRIM(@timepart),LEN(RTRIM(@timepart))-3,2) + ':'+RIGHT(RTRIM(@timepart),2) AS DATETIME)
您应该查看 Convert
的帮助页面,看看最适合您的需求:https://msdn.microsoft.com/en-us/library/ms187928.aspx
SELECT Convert(datetime, '20160128' + ' ' + '22:07:47', 113)
似乎有效,所以我建议您简单地连接日期,并根据需要 丰富 时间部分(使用 SubString()
,注意添加当小时部分只有 1 个数字时,起始为零)
如果您可以将字符串转换为 SQL 服务器可以本地解析的格式,您就可以直接转换它 - 例如yyyyMMdd hh:mm:ss 格式:
declare @date char(8)
set @date = '20160128'
declare @time char(6)
set @time = '220747'
select cast(@date + ' ' + substring(@time, 1, 2) + ':' + substring(@time, 3, 2) + ':' + substring(@time, 5, 2) as datetime)
试试这个..
declare @val varchar(10) = '20160128'
declare @va2 varchar(10) = '220747'
select convert(datetime,cast(convert(date, @val, 121) as varchar(10)) +' '+substring(cast(@va2 as varchar (6)), 1, 2)+':'+substring(cast(@va2 as varchar(6)), 3, 2)+':'+substring(cast(@va2 as varchar(6)), 5, 2)) as Date
试试这个:-
DECLARE @dtpart VARCHAR(16) = '20160128';
DECLARE @timepart VARCHAR(16) = '220747';
DECLARE @t DateTIME
SET @t = LEFT(@timepart,LEN(@timepart)-4)+':'+SUBSTRING(@timepart,LEN(@timepart)-3,2)+':'+RIGHT(@timepart,2)
select LEFT(convert(varchar(50),Convert(datetime, @dtpart ,100)),11)+' '+ LTRIM(RIGHT(CONVERT(CHAR(20), @t, 22), 11))
我有一个 table(再次由生物识别软件实现),它将日期和时间作为字符串存储在不同的列中。
日期列存储日期,例如 20160128
for January 18 2016
,时间列存储时间,例如 220747
(10:07:47 PM
).
如何连接两个字符串并转换为有效的日期时间值?
我已经提到了这里提出的其他几个问题,发现其中很多只涉及日期部分,缺少时间因素
以下是一个示例脚本,它从存储在 VARCHAR
列中的日期和时间进行转换。如果格式为 YYYYMMDD[ hh:mm:ss[.mmm]]
(ISO 8601 格式),则可以转换为 DATETIME
:
DECLARE @dtpart VARCHAR(16) = '20160128';
DECLARE @timepart VARCHAR(16) = '220747';
SELECT
CAST(@dtpart+' '+LEFT(@timepart,LEN(@timepart)-4)+':'+SUBSTRING(@timepart,LEN(@timepart)-3,2)+':'+RIGHT(@timepart,2) AS DATETIME)
如果您的 date/time 字符串存储在 CHAR
列中,则由于字符串用空格填充,因此会涉及更多。这需要使用 RTRIM
:
DECLARE @dtpart CHAR(16) = '20160128';
DECLARE @timepart CHAR(16) = '20747';
SELECT CAST(RTRIM(@dtpart) + ' ' + LEFT(RTRIM(@timepart),LEN(RTRIM(@timepart))-4)+ ':' + SUBSTRING(RTRIM(@timepart),LEN(RTRIM(@timepart))-3,2) + ':'+RIGHT(RTRIM(@timepart),2) AS DATETIME)
您应该查看 Convert
的帮助页面,看看最适合您的需求:https://msdn.microsoft.com/en-us/library/ms187928.aspx
SELECT Convert(datetime, '20160128' + ' ' + '22:07:47', 113)
似乎有效,所以我建议您简单地连接日期,并根据需要 丰富 时间部分(使用 SubString()
,注意添加当小时部分只有 1 个数字时,起始为零)
如果您可以将字符串转换为 SQL 服务器可以本地解析的格式,您就可以直接转换它 - 例如yyyyMMdd hh:mm:ss 格式:
declare @date char(8)
set @date = '20160128'
declare @time char(6)
set @time = '220747'
select cast(@date + ' ' + substring(@time, 1, 2) + ':' + substring(@time, 3, 2) + ':' + substring(@time, 5, 2) as datetime)
试试这个..
declare @val varchar(10) = '20160128'
declare @va2 varchar(10) = '220747'
select convert(datetime,cast(convert(date, @val, 121) as varchar(10)) +' '+substring(cast(@va2 as varchar (6)), 1, 2)+':'+substring(cast(@va2 as varchar(6)), 3, 2)+':'+substring(cast(@va2 as varchar(6)), 5, 2)) as Date
试试这个:-
DECLARE @dtpart VARCHAR(16) = '20160128';
DECLARE @timepart VARCHAR(16) = '220747';
DECLARE @t DateTIME
SET @t = LEFT(@timepart,LEN(@timepart)-4)+':'+SUBSTRING(@timepart,LEN(@timepart)-3,2)+':'+RIGHT(@timepart,2)
select LEFT(convert(varchar(50),Convert(datetime, @dtpart ,100)),11)+' '+ LTRIM(RIGHT(CONVERT(CHAR(20), @t, 22), 11))