连接日期和字符串以在 SQL 中创建日期时间
Concatenate date and string to create datetime in SQL
我需要将 SQL 中的日期时间和时间字段连接到单个日期时间。
例如,我的日期时间为 2017-09-05 00:00:00.000,字符串时间为 11:00。我想要的是 2017-09-05 11:00:00.000
视图中的单个字段
我试过将日期时间转换为日期,然后将新日期和字符串日期字段连接在一起,但这不起作用。
投射我正在使用的日期时间:CAST(dtDate AS DATE) AS dtNewDate
效果很好。当我然后使用: CAST(dtNewDate + szTime AS datetime) AS dtNewDateTime
视图的创建工作正常但选择前 1000 returns a "conversion failed when converting date and/or time from character string."
有没有更简单的方法来做到这一点,或者任何人都可以提供一些建议(除了首先将日期和时间存储在单个日期时间字段中,因为它由我没有的第三方应用程序填充访问更改)
您可以将两个 datetime
值相加,因此请尝试:
CAST(dtDate AS DATETIME) + CAST(CAST(szTime AS TIME) as DATETIME)
假设 11:00
代表 11:00:00
,你可以这样做:
SELECT dtDate + CONVERT(DateTime, szTime, 108)
FROM...
您可以尝试关注
DECLARE @YourDate AS DATETIME
SET @YourDate = CONVERT(VARCHAR(10), '2017-09-05 00:00:00.000', 111) + ' 11:00'
PRINT @YourDate
另一种方法是从字符串字段中获取小时,将其转换为 int,并将其作为小时添加到日期时间
declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:00'
select left(@stringtime, 2),
dateadd(hour, convert(int, left(@stringtime, 2)), @date)
如果您还需要会议记录,您可以这样做:
declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:05'
select left(@stringtime, 2),
right(@stringtime, 2),
dateadd(minute, convert(int, right(@stringtime, 2)), dateadd(hour, convert(int, left(@stringtime, 2)), @date))
这仅在字符串字段始终采用 hh:mm
格式时才有效
如果你关心 precision with DATETIME2
,
DECLARE @D DATETIME = '2017-01-01';
DECLARE @T varchar(7) = '11:00';
SELECT DATEADD(day, DATEDIFF(day, '19000101', @D), CAST(CAST(@T AS TIME) AS DATETIME2(7)));
我需要将 SQL 中的日期时间和时间字段连接到单个日期时间。
例如,我的日期时间为 2017-09-05 00:00:00.000,字符串时间为 11:00。我想要的是 2017-09-05 11:00:00.000
视图中的单个字段我试过将日期时间转换为日期,然后将新日期和字符串日期字段连接在一起,但这不起作用。
投射我正在使用的日期时间:CAST(dtDate AS DATE) AS dtNewDate
效果很好。当我然后使用: CAST(dtNewDate + szTime AS datetime) AS dtNewDateTime
视图的创建工作正常但选择前 1000 returns a "conversion failed when converting date and/or time from character string."
有没有更简单的方法来做到这一点,或者任何人都可以提供一些建议(除了首先将日期和时间存储在单个日期时间字段中,因为它由我没有的第三方应用程序填充访问更改)
您可以将两个 datetime
值相加,因此请尝试:
CAST(dtDate AS DATETIME) + CAST(CAST(szTime AS TIME) as DATETIME)
假设 11:00
代表 11:00:00
,你可以这样做:
SELECT dtDate + CONVERT(DateTime, szTime, 108)
FROM...
您可以尝试关注
DECLARE @YourDate AS DATETIME
SET @YourDate = CONVERT(VARCHAR(10), '2017-09-05 00:00:00.000', 111) + ' 11:00'
PRINT @YourDate
另一种方法是从字符串字段中获取小时,将其转换为 int,并将其作为小时添加到日期时间
declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:00'
select left(@stringtime, 2),
dateadd(hour, convert(int, left(@stringtime, 2)), @date)
如果您还需要会议记录,您可以这样做:
declare @date datetime = '20170905'
declare @stringtime varchar(5) = '11:05'
select left(@stringtime, 2),
right(@stringtime, 2),
dateadd(minute, convert(int, right(@stringtime, 2)), dateadd(hour, convert(int, left(@stringtime, 2)), @date))
这仅在字符串字段始终采用 hh:mm
格式时才有效如果你关心 precision with DATETIME2
,
DECLARE @D DATETIME = '2017-01-01';
DECLARE @T varchar(7) = '11:00';
SELECT DATEADD(day, DATEDIFF(day, '19000101', @D), CAST(CAST(@T AS TIME) AS DATETIME2(7)));