sql-server - SQL Server 日期时间转换问题
问题描述
下面是我正在使用的 SQL 服务器查询,
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”,如果条件为真,则在一个名为“comment”的新列中分配值,该列显示错误值。
请帮助我了解问题出在哪里,是日期时间转换问题还是其他问题。
解决方案
您可以尝试使用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]
推荐阅读
- angular - 合并两个 observables 然后转换结果
- .htaccess - 配置 htaccess 以忽略最后一个斜杠后的任何内容
- ember.js - 无法transitionTo,错误“传递的上下文对象多于动态段”不正确
- php - 提供没有错误的空白页
- python - C++ 代码和 Python 代码之间的通信
- server - 在网站构建器中处理自定义域?
- php - 使用php阻止url指定的文件夹或路径
- ffmpeg - 使用 pkg-config 未找到编译 FFMPEG x265
- spring - 引起:java.lang.ClassNotFoundException: org.springframework.messaging.converter.MessageConverter 在微服务
- swift - 为什么没有迅速收到委托事件?