我有两个表中包含日期,表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
答案 0 :(得分:2)
CONVERT(datetime,TBL1.StartDate)
而不是
LEFT(TBL1.StartDate,10)
左边会产生一个字符串,但你需要一个日期时间类型来制作=。
答案 1 :(得分:1)
试试这个
CONVERT(varchar(10),Date,103) as StartDate
代替LEFT(TBL1.StartDate,10)
答案 2 :(得分:1)
为了正确的日期比较,首先需要将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