我有两个表,其中有日期,表1中的数据类型是(datetime,null)。表2中的数据类型是varchar(10)。我正在尝试编写一个查询,该查询将匹配每个表中的两个日期,并根据macth标记它们是否正确。我已经复制了下面的查询,但我总是在转换语法上遇到问题,我正在尝试获取DD/MM/YYY
。我非常感谢任何人在围绕日期列包装正确语法方面的帮助。
Select TBL1.ID,
TBL1.AccountName,
TBL1.StartDate,
TBL2.StartDate,
CASE
WHEN LEFT(TBL1.StartDate,10) = TBL2.StartDate THEN 'Correct' ELSE 'Incorrect' END AS 'Date Check'
FROM TBL1
INNER JOIN TBL2 ON TB1.ID = TBL2.ID
GROUP BY TBL1.ID,
TBL1.AccountName,
TBL1.StartDate,
TBL2.StartDate
发布于 2014-01-03 00:18:47
CONVERT(datetime,TBL1.StartDate)
而不是
LEFT(TBL1.StartDate,10)
Left将生成一个字符串,但您需要一个datetime类型来生成=。
发布于 2014-01-03 00:32:56
尝尝这个
CONVERT(varchar(10),Date,103) as StartDate
而不是LEFT(TBL1.StartDate,10)
发布于 2014-01-03 00:42:09
为了进行正确的日期比较,首先需要将varchar类型转换为相应的日期时间表示形式,然后将两个日期转换为通用格式,然后进行比较。
所以改变吧
LEFT(TBL1.StartDate,10) = TBL2.StartDate
至
CONVERT( varchar(11),TBL1.StartDate,101) = CONVERT(varchar(11),CAST(TBL2.StartDate as DATETIME),101)
将varchar列TBL2.StartDate转换为datetime将检查有效的日期值,如果输入了无效的日期值,则会抛出错误。
另外,要获取dd/mm/yyyy格式的日期列,请使用
Select
CONVERT(VARCHAR(11),TBL1.StartDate,103),
CONVERT(VARCHAR(11),TBL2.StartDate,103)
More detailed format list here . I suggest bookmarking it,very helpful
https://stackoverflow.com/questions/20886895
复制相似问题