SQL Server日期时间转换问题

时间:2018-08-08 08:11:28

标签: sql-server sql-server-2008

下面是我正在使用的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))

,输出如下面的屏幕快照所示:

enter image description here

我在这里比较'NewDate'和'NewDate2'列,如果条件为true,则在一个名为'comment'的新列中分配值,该列显示错误的值。

请帮助我了解问题出在哪里,它是日期时间转换问题还是其他问题。

1 个答案:

答案 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]