下面是我正在使用的SQL Server查询,
SELECT
*,
CONCAT(CONVERT(date, startdate, 104), RIGHT(+' '+ CONVERT(VARCHAR, startTime), 8)) AS NewDate,
CONCAT(CONVERT(date, '7.8.2018', 104), RIGHT(+' '+ CONVERT(VARCHAR, '3:51:23'), 8)) AS NewDate2,
CASE
WHEN CONCAT(CONVERT(date, startdate, 104), RIGHT(+' '+ CONVERT(VARCHAR, startTime), 8)) < CONCAT(CONVERT(date, '7.8.2018', 104), RIGHT(+' '+ CONVERT(VARCHAR, '3:51:23'), 8))
THEN '1'
ELSE '0'
END AS comment
FROM
[dbo].[LMT2_ServerLicenseUser]
WHERE
CONCAT(CONVERT(date, startdate, 104), RIGHT(+' '+ CONVERT(VARCHAR, startTime), 8)) > CONCAT(CONVERT(date, '7.8.2018', 104), RIGHT(+' '+ CONVERT(VARCHAR, '3:51:23'), 8))
,输出如下面的屏幕快照所示:
我在这里比较'NewDate'和'NewDate2'列,如果条件为true,则在一个名为'comment'的新列中分配值,该列显示错误的值。
请帮助我了解问题出在哪里,它是日期时间转换问题还是其他问题。
答案 0 :(得分:0)
您可以尝试使用cast(startdate as datetime) + cast(startTime as datetime)
让列转换为DateTime
,然后进行比较,因为您无法比较字符串DateTime
的格式。
Select *
,CONCAT( CONVERT(date, startdate, 104), RIGHT(+' '+ CONVERT(VARCHAR,startTime),8)) AS NewDate
,CONCAT( CONVERT(date, '7.8.2018', 104), RIGHT(+' '+ CONVERT(VARCHAR,'3:51:23'),8)) AS NewDate2
,case
cast(startdate as datetime) + cast(startTime as datetime) > cast('7.8.2018' as datetime) + cast('3:51:23' as datetime)
then '1'
else '0'
end as comment
from [dbo].[LMT2_ServerLicenseUser]