日期转换varchar(10)

时间:2014-01-02 16:11:10

标签: sql sql-server

我有两个表中包含日期,表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

3 个答案:

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